69,382
社区成员
发帖
与我相关
我的任务
分享
int *ptr1 = (int*)(&a + 1);
int *ptr2 = (int*)((int)a + 1);
printf("%x ,%x", ptr1[-1], *ptr2);
#include <stdio.h>
int main()
{
int a[5] ={1,2,3,4,5};
int *ptr1 = (int*)(&a+1);
int *ptr2 = (int*)((int)a+1);
printf("%p \n", a);
printf("%p , %p, %p\n", ptr1, ptr1-1, ptr2);
printf("%d\n", ptr1[-1]);
//printf("%x ,%x", ptr1[-1],*ptr2);
return 0;
}
注意ptr[-1]能够得到值是5,但是ptr2就不能了,通过打印ptr2指向的内存地址就可以发现,它的地址和a的地址就相差很大。主要是因为(int)a + 1已经改变了a的地址,地址是unsigned int类型,强转int类型就改变了它的值。