#include
int main(){
int a[5] = {1,2,3,4,5};
int* p= (int*)(&a+1);
printf("%d",*(p-1)); // 这段代码会输出4
}
原因:
array和&array的值是一样的,但是他们代表的意义完全不一样,array是数组首元素的首地址(和&array[0]一样),&array是整个数组array的首地址.
“+1”就是偏移量问题:一个类型为T的指针的移动,是以sizeof(T)为移动单位。
sizeof(array[0])单位。此处的类型T就是数组中的一个int型的首元素。注意:在以下两中场合下,数组名并不是用指针常量来表示:
当数组名作为sizeof操作符和单目操作符&的操作数时。 sizeof返回整个数组的长度,而不是指向数组的指针的长度。 取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个指针常量的指针。所以&a后返回的指针便是指向数组的指针,跟a(一个指向a[0]的指针)在指针的类型上是有区别的。