我从下面代码的输出中得到的是*(pa-1)=5
:为什么这样?
#include<iostream>
using namespace std;
int main(){
int a[5]={1,2,3,4,5};
int *pa=(int *)(&a+1);
cout<<"*(pa-1)="<<*(pa-1)<<endl;
}
最佳答案
&a
是数组的地址,类型为“pointer-to-int[5]
”。因此 &a + 1
前进了整个五个数组,并指向刚好超过数组。
pa
是一个类型双关指针*,现在将相同的地址视为 整数 数组(不是数组!)内的地址。因此它等同于尾后一个指针a + 5
。减一给出指向数组中最后一个元素的指针,即 5
。
*) 这种类型的双关语是可以接受的,只要数组的底层类型是标准布局,即int
是。
关于c++ - 为什么 *(pa-1) 的输出是 `a` 的最后一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11724215/