1.如何在堆上声明一个三维数组?

 

 1 int _tmain(int argc, _TCHAR* argv[])
 2 {
 3     int i , j, k;  
 4     int nWidth, nHeight, nThird;  
 5 
 6     cin >> nThird >> nHeight >> nWidth; 
 7 
 8     int ***grayScale = new int **[nThird];  
 9     for (i = 0; i < nThird; i++)  
10     {  
11         grayScale[i] = new int*[nHeight];  
12         for (j = 0; j < nHeight; j++)  
13         {  
14             grayScale[i][j] = new int[nWidth];  
15         }  
16     }  
17 
18     for (k = 0; k < nThird; k++)  
19     {  
20         for (j = 0; j < nHeight; j++)  
21         {  
22             for (i = 0; i < nWidth; i++)  
23             {  
24                 grayScale[k][j][i] = 1;  
25             }  
26         }  
27     }  
28 
29     for (k = 0; k < nThird; k++)  
30     {  
31         for (j = 0; j < nHeight; j++)  
32         {  
33             for (i = 0; i < nWidth; i++)  
34             {  
35                 cout << grayScale[k][j][i];  
36             }  
37             cout << endl;  
38         }  
39         cout << endl;  
40     } 
41     system("pause");
42     return 0;
43 }

 

 

若输入是:

3

3

3

则输出是:

111

111

111

 

111

111

111

 

111

111

111

这样的话,在堆上声明个二维数组就更没问题了。

当然与new相对应的就是malloc了,所以此题还有另外一种解法:

 

1 int ***grayScale = (int ***)malloc(sizeof(int) * nThird);   
2 for (i = 0; i < nThird; i++)  
3 {  
4     grayScale[i] = (int **)malloc(sizeof(int) * nHeight);  
5     for (j = 0; j < nHeight; j++)  
6     {  
7         grayScale[i][j] = (int *)malloc(sizeof(int) * nWidth);  
8     }  
9 }