int (*arr)[5];
将 arr
声明为指向包含 5 个元素的数组的指针的逻辑是什么,而 int * arr[5]
将 arr
声明为 5 个指针的数组?特别是考虑到 *
的优先级较低(不确定这部分,因为它不用作取消引用运算符)?
最佳答案
在声明和表达式中,像[]
这样的后缀运算符比像*
这样的一元运算符有更高的优先级,所以像
T *a[N];
被解析为
T *(a[N]);
因此
a -- a is
a[N] -- an N-element array of
*a[N] -- pointer to
T *a[N]; -- T
如果要将a
声明为指向数组 的指针,则需要显式地将*
运算符与 分组一个
:
T (*a)[N];
因此:
a -- a is
(*a) -- a pointer to
(*a)[N] -- an N-element array of
T (*a)[N]; -- T
幸运的是,与指向数组的指针相比,您更有可能使用指针数组,因此“更简单”的声明形式产生该类型是有道理的。
关于c - 指向数组语法的奇怪指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46713844/