Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么这个声明不起作用_C_Pointers - Fatal编程技术网

C 为什么这个声明不起作用

C 为什么这个声明不起作用,c,pointers,C,Pointers,在int(*x)[10]中x是指向10ints数组的指针 那么,为什么这段代码不编译: int arr[3] ; int (*p)[3] =arr; 但这是可行的: int arr[3]; int (*p)[3] =&arr; arr是一个计算结果为int*的表达式(这是著名的“数组衰减到指针”功能) &arr是一个计算结果为int(*)[3]的表达式 数组名称“衰减”到指向所有表达式中数组第一个元素的指针,除非它们是sizeof或&运算符的操作数。对于这两个操作,数组名称保留

int(*x)[10]中
x
是指向10
int
s数组的指针

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

int arr[3] ;

int (*p)[3] =arr;
但这是可行的:

int  arr[3];

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

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

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


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

其工作原理与以下原因不完全相同:

int i;
int* pi = i; // error: no conversion from int to int*

+1:我还要指出,尽管类型不同,但两个表达式返回相同的指针地址。