#include<stdio.h>
int main ()
{
int a[4]={1,2,3,4};
int * ptr1=(int *) (&a+1);
int * ptr2=(int *) ((int)a +1);
printf("%x\n %x\n",&a[0],&a[1]);
printf("%x %x",ptr1[-1],*ptr2);
return 0;
/****结果******/
/*
22FEF8
22FEFC
4 2000000
*/
}
通常X86机器采用的小段存储
Base Address+0 Byte0 Base Address+1 Byte1 Base Address+2 Byte2 Base Address+3 Byte3
MOTO机器采用大端存储
Base Address+0 Byte3 Base Address+1 Byte2 Base Address+2 Byte1 Base Address+3 Byte0
本题内存结构如图
[1000] [2000] [3000] [4000] [5000] 地址[5000]没有的 &a+1 地址就是 [4000]地址加一 这里表示[5000] ptr1[-1]值为 [4000] 即4
(int *) ((int)a +1) 首先a是数组首地址 转换成int型22FEF8即为int型 ((int)a+1) 变成了22FEF9 (移动一个字节) 输出时为2000000