&a[0]表示取a[0]元素的地址,地址加一,得到a[1]元素的地址,即得3
这题很坑...
先是&a[0]取数组a的首地址, 然后+1, 到这里这个结果的意义已经不是数字了, 而是内存地址, 而且这里的+1是指下一个元素的内存地址, 如果a[0]的地址是0x0000, 那么这里&a[0]+1后的结果是0x0004, 而不是0x0001, 因为int占4个大小.
写的这么复杂, =号后面其实就是a[1]的内存地址, 所以这里是3
有点绕
主要是这个赋值是在定义这所以
*p=
并不是对
*p
赋值,而是对p赋值,相当于
int *p
;p=&a[0]+1;
如果写成
int a[2]={1,3};
int*p;
*p=&a[0]+1;
那就是另外个值了