我意识到有很多数组和指针问题,但我有一个非常具体的问题。。。事实上,这是我不久前在课堂上参加的一次测试,现在我仍然有问题
问题是-为
写一份完整的声明一个名为pmatrix的变量,它是一个指向8个数组的指针,其中10个数组指向整数
到目前为止,我想的是
int*pmatrix[8][10],
更关心的是一个好的解释,而不仅仅是一个答案
谢谢
一个名为pmatrix的变量,它是一个指针:
*pmatrix
到8个的阵列
(*pmatrix)[8]
10个阵列
(*pmatrix)[8][10]
指向整数的指针:
int *(*pmatrix)[8][10]
代入cdecl,我们被告知如下:
将pmatrix声明为指向int 的指针的数组10的数组8的指针
这就是我们开始的地方!
int*pmatrix[8][10]
有一个优先级问题:[]
的优先级更高而不是"*",因此这是指针的数组[10]的数组[8]CCD_ 2。您需要添加括号来覆盖优先级:
int (*pmatrix)[8][10]
(更多的括号是可能的。我不确定
int (((*pmatrix)[8])[10]);
这将是一个改进,但是:-(。(
您的问题的答案是
int* (*pmatrix)[8][10];
请记住,数组只是指向数组第一个元素的指针,因此数组是指针,指针是数组(有时只有一个元素(。
不过,请注意,在这个数组下面实际上只是一个由80个元素组成的一维数组。如果你做这样的索引:
int pmatrix[8][10];
pmatrix[3][5];
编译器将其视为:
*(pmatrix + (3 * 10) + 5);
因为索引CCD_ 3访问3rd子阵列的5th元素(+5((3*10(10是每个子阵列的大小((。
int** pmatrix = new int*[8]; // Array of 8 pointers to arrays
for(int i = 0; i < 8; ++i) pmatrix[i] = new int[10]; // Create each array