以下声明之间有什么区别:
int* arr1[8];
int (*arr2)[8];
int *(arr3[8]);
Run Code Online (Sandbox Code Playgroud)
理解更复杂的声明的一般规则是什么?
编辑
我已经在这里阅读了问题和答案:指向数组/指针数组的C指针消歧.那里的答案并没有解决我的问题的重点以及下面已经发布的一些答案.这是类似的,但不是重复的.这里的重点旨在集中解释如何()
更改声明.链接的重点更广泛,实际上并不围绕()
声明的影响和影响,例如我在下面列出的声明.
造成差异的原因是什么?
int *a[5];
int (*a)[5];
被创造了吗?
我对如何()
更改声明的解释特别感兴趣.
例如:
随着1)
a[0] = malloc(sizeof(int)); //compiles
Run Code Online (Sandbox Code Playgroud)
但是2)它没有.(错误:数组类型int [5]不可分配)
问题:
1)()
in 的影响是2)
什么?
2)为什么宣言2
会被用于宣言1?
(也就是说,为什么要使用声明2
?)