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