(*)[]和*[]声明之间的区别

ryy*_*ker 0 c arrays pointers

编辑
我已经在这里阅读了问题和答案:指向数组/指针数组的C指针消歧.那里的答案并没有解决我的问题的重点以及下面已经发布的一些答案.这是类似的,但不是重复的.这里的重点旨在集中解释如何()更改声明.链接的重点更广泛,实际上并不围绕()声明的影响和影响,例如我在下面列出的声明.

造成差异的原因是什么?

  1. int *a[5];

  2. 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?)

Sou*_*osh 5

它们不一样,而且完全不同.

  1. int *a[5];是一个5 int *秒的数组.

  2. int (*a)[5];是一个指向5 int秒数组的指针.

因此,在前一种情况下,a[0]是一个指针变量,因此,您可以分配.但是在后面a[0],根据定义,它是一个数组类型,并且不可赋值.


编辑:

如果您对由于存在而导致的类型差异感兴趣,请()查看运算符优先级.在[]拥有更高的优先级*,所以没有明确()的附件a[]第一.