C++中的指针数组问题



我意识到有很多数组和指针问题,但我有一个非常具体的问题。。。事实上,这是我不久前在课堂上参加的一次测试,现在我仍然有问题

问题是-为
写一份完整的声明一个名为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

相关内容

  • 没有找到相关文章

最新更新