#include<stdio.h>
int main()
{
int a[4]={2,3,2,3};
int *p1=(int *)&a+1;
int *p2=(int *)((int)a+1);
printf("%x,%x\n",*(p1-1),*p2);
return 0;
}
解析:
p1:
(int *)&a=a;
(int *)&a+1=a+1;
所以 p1=&a[1];
p1-1=&a[0];
*(p1-1)=a[0]=2;
p2:
(int)2在数组中以十六进制存放,0x00000002为 02 00 00 00 (低地址放小数据)
假设数组a的首地址为10,
(int)a=10;
(int)a+1=11;
*p2=0x03000000;
输出为3000000