#include<iostream>
using namespace std;
int main() {
int a[4] = { 1,2,3,4 };
int *ptr = *(&a + 1);
printf("%d", *(ptr - 1));
system("pause");
}输出结果为:4
#include<iostream>
using namespace std;
int main() {
int a[4] = { 1,2,3,4 };
int *ptr = (a + 1);
printf("%d", *(ptr - 1));
system("pause");
}
输出结构为1
为什么呢?
因为&a+1指的是a类型的括号中的(&a+1),其实际指针类型为 int(*)[4] ,指针指向的类型为 int()[4] ,
所以对 &a 指针加一的结果是移动到下一个 int()[4] 的单元,即当前数组尾的下一个单元。
在进行了指针类型转换后,指针类型变为int *,指针指向类型变为 int,此时ptr-1的结果就是把指针向前移动一个int类型的大小,正好指向数组最后一个元素