***今天看到这一道分析起来还是很有意思的,对内存的要有一定理解才能分析出来,现在我就以个人理解来对该题进行分析。***
在 x86 平台下,分析以下代码的输出结果:
#include
int main(void)
{
int a[4] = {1, 2, 3, 4};
int *p1=(int *)(&a+1);
int *p2=(int *)((int)a+1);
printf("%x, %x\n", p1[-1], *p2);
return 0;
}
为了更好理解,画内存图来分析理解
从图中就很容易理解ptr2 =0x1001,由于ptr2是int类型指针地址所以ptr2所指向的int数是2 00 00 00 。