先上结论:
对于int a[5],*p;
p=a; 或p=&a[0]是正确的
p=&a严格来说是错误的
首先要搞清楚a与&a的区别:a表示数组首元素的首地址,即元素a[0]的地址;&a表示整个数组的地址。二者的值是相同的,但意义并不一样。正如成都市政府与四川省政府的地址都在成都,但二者表示的含义不同。
如下图所示,a表示a[0]的地址
&a则表示整个数组的地址
二者的值之所以相同,因为地址是取自第一个字节的地址,数组元素a[0]的第一个字节与整个数组的第一个字节显然是相同的。
a与&a[0]及&a的值如下:
1244980,1244980,1244980
a+1与&a[0]+1值如下:
1244984,1244984
但&a+1的值为1245000。
a+1与&a[0]+1都是表示下一个数组元素的地址,以元素为单位相加,地址值+4。而&a+1表示下一个数组的地址,以数组为单位相加,地址值+20.
所以,p=a; 或p=&a[0]是正确的,表示指针p指向数组的首元素。