来看一道简单的笔试题
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
int* ptr = (int*)(&a + 1);
printf("%d,%d", *(a + 1), *(ptr - 1));
return 0;
}
//程序的结果是什么? // 2,5
-
*(a + 1)
a是数组首元素地址
a+1是数组第二个元素的地址
*(a+1)就是数组第二个元素的值 -
(ptr - 1)
ptr = (int)(&a + 1)
ptr是一个普通的指针
&a + 1 赋值给ptr,就是首元素地址偏移数组总字节长度大小
于是ptr指向了数组最后一个元素紧挨的下一个元素
ptr-1指向了数组最后一个元素
*(ptr - 1)就是最后一个元素
直接看图吧