c - 指向数组语法的奇怪指针

标签 c arrays pointers

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/

相关文章:

python - 列表和数组在存储值时有何不同?

c - 如何为结构内的矩阵赋值?

Python Ctypes 传递 .h 文件中定义的结构指针。

c - Gwan 处理程序状态

c - 链接多个 C 源文件

arrays - 如何在 Matlab 中用另一个不同大小的数组的相应值替换表列的某些元素?

arrays - 如何在 Bash 中找到数组元素的总和?

c - 这些 IP 地址来自哪里?

c - 多线程 random_r 比单线程版本慢

pointers - 尼姆 : Addresses of parameters and mutability