我意识到有很多数组和指针问题,但我有一个非常具体的...它实际上来自我前一段时间上课的测试而且我仍然遇到麻烦。
问题是 - 写出完整的声明 一个名为pmatrix的变量,它是一个指向8个数组的数组的指针,该数组包含10个指向整数的指针
到目前为止,我正在考虑像 int * pmatrix [8] [10],更关心的是一个好的解释,而不仅仅是一个答案 谢谢!
答案 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