括号在指针数组声明期间有作用吗?

问题描述 投票:0回答:1

最近我在读 Brain 和 Dennis 的《C 编程语言》教科书,发现指针数组定义之间存在差异,如下所示:

int (*a)[10];

int *a [10];

https://i.sstatic.net/82lnWvfT.png

课本上是这样说的:

摘自《C 编程语言》教科书

我不太明白其中的区别。如果

 int (*a)[10];

定义了一个指向10个整数的数组的指针,'*'有什么用。和有什么区别

 int (*a)[10];

 int a [10];

https://i.sstatic.net/kE2ruHVb.png

arrays c pointers brackets
1个回答
0
投票

这就是我如何解释它以使其变得简单 - 右左规则(递归)。 所以对于第一种情况

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
© www.soinside.com 2019 - 2024. All rights reserved.