c - 为什么这个声明不起作用

标签 c pointers

int (*x)[10];x是一个指向10个int数组的指针

那么为什么这段代码不能编译:

int arr[3] ;

int (*p)[3] =arr;

但这行得通:

int  arr[3];

int (*p)[3] =&arr;

最佳答案

arr 是一个计算结果为 int* 的表达式(这是著名的“数组衰减到指针”特性)。

&arr 是一个计算结果为 int (*)[3] 的表达式。

数组名称“衰减”为指向所有表达式中数组第一个元素的指针,除非它们是 sizeof& 运算符的操作数。对于这两个操作,数组名称保留其“数组性”(C99 6.3.2.1/3“左值、数组和函数指示符”)。

关于c - 为什么这个声明不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7349971/

相关文章:

c - 访问 C 中的结构 - 函数

c++ - 在不复制的情况下修剪字符串的开始

c - 来自变量名的指针

c - 在文件 c 中搜索关键字

c - scanf 从函数到数组

c++ - 将派生类构造函数分配给基类指针

c - 通过时间延迟增加整数

python - Gdb python 脚本: No symbol in current contex - even if symbol is there

c - 未分配值

c - 指向结构的指针