C ++中的指针数组问题

时间:2011-04-30 23:06:25

标签: c++ pointers multidimensional-array

我意识到有很多数组和指针问题,但我有一个非常具体的...它实际上来自我前一段时间上课的测试而且我仍然遇到麻烦。

问题是 - 写出完整的声明 一个名为pmatrix的变量,它是一个指向8个数组的数组的指针,该数组包含10个指向整数的指针

到目前为止,我正在考虑像 int * pmatrix [8] [10],

更关心的是一个好的解释,而不仅仅是一个答案 谢谢!

4 个答案:

答案 0 :(得分:4)

一个名为pmatrix的变量,它是一个指针:

*pmatrix

到8的数组

(*pmatrix)[8]

10的数组

(*pmatrix)[8][10]

指向整数的指针:

int *(*pmatrix)[8][10]

代入cdecl,我们被告知以下内容:

  

将pmatrix声明为指向int

指针的数组10的数组8的指针

这是我们开始的地方!

答案 1 :(得分:1)

int*pmatrix[8][10]

存在优先问题:[]具有更高的优先级 比'*',所以这是指向数组[10]的数组[8] int。您需要添加括号以覆盖优先级:

int (*pmatrix)[8][10]

(更多括号是可能的。我不确定

int (((*pmatrix)[8])[10]);
然而,

会有所改进: - )。)

答案 2 :(得分:0)

你问题的答案是

int* (*pmatrix)[8][10];

请记住,数组只是指向数组第一个元素的指针,因此数组是指针,指针是数组(有时只有一个元素)。

但请注意,此数组下方实际上只是一个包含80个元素的单维数组。如果你做这样的索引:

int pmatrix[8][10];
pmatrix[3][5];

编译器将其视为您:

*(pmatrix + (3 * 10) + 5);

因为索引[3][5]访问 3rd 子阵列的 5th 元素(+5)(3 * 10(10是每个子数组的大小) ))。

答案 3 :(得分:0)

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