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 }
浙公网安备 33010602011771号