假设数组名是buf。
则buf和&buf充当右值时的区别是:
buf是数组首元素的首字节地址;&buf是整个数组的首地址。
解释:
这两个在值上是相等的,但是意义及数据类型不相同。
&buf作右值时,只能赋值给“数组指针类型”的指针变量,即&buf得到的是一个数组指针。
buf作右值时,只能赋给普通的指针变量,该指针变量的类型要和数组的数据类型一致。
意义不相同会导致他们在参与运算的时候有不同的表现(有什么不同?见下例)。
【例】
#include <stdio.h>
int main(void){
int i
;
int buf
[5]={1,2,3,4,5};
int (*p1
)[5]=NULL;
int *p2
=NULL;
p1
=&buf
;
for(i
=0;i
<5;i
++){
printf("%2d", *((*p1
+0)+i
) );
}
printf("\n");
p2
=buf
;
for(i
=0;i
<5;i
++){
printf("%2d",*(p2
+i
));
}
return 0;
}
运行结果: