最近我在读 Brain 和 Dennis 的《C 编程语言》教科书,发现指针数组定义之间存在差异,如下所示:
int (*a)[10];
int *a [10];
(https://i.sstatic.net/82lnWvfT.png)
课本上是这样说的:
我不太明白其中的区别。如果
int (*a)[10];
定义了一个指向10个整数的数组的指针,'*'有什么用。和有什么区别
int (*a)[10];
int a [10];
这就是我如何解释它以使其变得简单 - 右左规则(递归)。 所以对于第一种情况
int (*a)[10];
a - 由于右括号,右侧没有任何内容。现在左边说它是一个指针。到目前为止 (*a) 意味着 a 是一个指针。现在再次向右移动,然后是 int 类型的 array[10] 。所以要完成它 - a 是指向 int[10] 数组的指针。
int *b [10];
b - a 右边是一个大小为 10 的数组,左边是 int 指针。所以 b 是一个大小为 10 的 int* 数组。
您可以通过检查a和b的尺寸来验证。
在我的机器上:
size of a:8
size of b:80