为什么这个声明不起作用

时间:2011-09-08 14:48:22

标签: c pointers

int (*x)[10]; x中是一个指向10 int s

数组的指针

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

int arr[3] ;

int (*p)[3] =arr;

但这有效:

int  arr[3];

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

2 个答案:

答案 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*