#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int *p=NULL;
int a = 2;
p = (int *)malloc(sizeof(int)*5);
memcpy(&p[2], &a, sizeof(int));
printf("%d %#x\n", p[2], &p[2]);
return 0;
}
我在CFree上 调试, 可以看到开辟的内存地址:
0x3e2590 : 0d f0 ad ba 0d f0 ad ba 而 &p [2] 的地址: (int *) 0x3e2598
0x3e2598 : 02 00 00 00 0d f0 ad ba
0x3e25a0 : 0d f0 ad ba 0d f0 ad ba
0x3e2598: ab ab ab ab ee fe ee fe
0x3e25b0: 00 00 00 00 00 00 00 00
从上可以看到, p[2] 使用的是 开辟的链表的第二个元素 , 而不是第三个。