在int (*x)[10];
x
中是一个指向10 int
s
那么为什么这段代码不能编译:
int arr[3] ;
int (*p)[3] =arr;
但这有效:
int arr[3];
int (*p)[3] =&arr;
答案 0 :(得分:10)
arr
是一个表达式,其值为int*
(这是着名的'数组衰减指针'功能)。
&arr
是一个评估为int (*)[3]
的表达式。
数组名称'衰减'指向所有表达式中数组的第一个元素的指针,除非它们是sizeof
或&
运算符的操作数。对于这两个操作,数组名称保留其“数组”(C99 6.3.2.1/3“Lvalues,数组和函数指示符”)。
答案 1 :(得分:0)
它的作用完全不同于:
int i;
int* pi = i; // error: no conversion from int to int*