我从下面代码的输出得到的是*(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;
}
Run Code Online (Sandbox Code Playgroud)
Ker*_* SB 12
&a是数组的地址,它的类型为"指向 - int[5]".因此&a + 1,整个五个数组的进展和刚好超过数组的点.
pa是类型punned指针*,现在把相同的地址作为阵列内的地址的整数(未阵列!).因此它与一个过去的结束指针相同a + 5.递减一个给出一个指向数组中最后一个元素的指针,即5.
*)这种类型的双关语是可以接受的,只要数组的基础类型是标准布局,就可以int达到预期效果.
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |