題目如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[2]={1,2};
int *ptr1=(int *)(&a+1);
int *ptr2=(int *)((int )a+1);
printf("%x,%x",ptr1[-1],*ptr2);
getch();
return 0;
}
解答:
&a 取得地址以后加一的操作,指针增加了sizeof(a)这么多的绝对地址。这应该是指针加了20,然后一个-1有减去了4,这样相当于指针的绝对地址加了16,指向的
就是a[4]的首地址。
第二个就是将指针的绝对地址,数值加一的操作,然后按照内存的排布,得出来的。下面是燕大哥给出的内存数据:
看看内存分布
0013FF6C 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00