本文共 293 字,大约阅读时间需要 1 分钟。
main(){ int a[5]={1,2,3,4,5}; int *p=(int *)(&a+1); printf("%d",*(p-1));}
int a[5]={1,2,3,4,5}等价于int (*q)[5]={1,2,3,4,5}那么*q=a,q=&a所以&a+1等于q+1 ,我们知道q是一个指向大小为5的数组的指针,q+1将使得q右移1个单位(也就是5个int大小的数组,指针移动是以所指向的元素类型为单位进行移动)再强制从(指向5个元素的数组的指针)转换为(指向一个int变量的指针),也就是指向a[6](虽然是溢出的),最后*(p-1)输出a[5]=5;.
转载地址:http://mogsi.baihongyu.com/