int arr[5] = {1,2,3,4,5};
int *ptr = (int *)(&arr+1);
int result1 = *(arr+1);
int result2 = *(ptr-1);
printf("%d,%d\n",result1,result2); // 结果为2,5
printf("%p\n%p\n",arr+1, &arr+1);
为何result2的结果为5呢?
问题的关键在于 int *ptr = (int *)(&arr+1);这一行代码,arr得到的是数组第一个元素的首地址,与&arr[0] 一样,但是&arr指向的是一个包含五个int型元素的数组首地址.
arr+1偏移量为sizeof(int)*1;
&arr+1偏移量为sizeof(int)*5;
网友评论