c++ - 为什么 *(pa-1) 的输出是 `a` 的最后一个元素?

标签 c++

我从下面代码的输出中得到的是*(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/

相关文章:

c++ - 是否可以在按钮上绘制彩色矩形?

c++ - 是否可以使用 C++ 流类来缓冲从管道读取的数据?

c++ - 错误 C2678 : '==' binary: no operator found which takes a left operand of type 'CSchemaString' (or there is no acceptable conversion)

c++ - 引号之间匹配/不匹配,带转义引号和多行

C++ 三次样条轨迹

c++ - 与 const 和非常量相同的对象,我应该假设什么才能正确运行?

c++ - QT - 多选

c++ - 如何保存CPLEX求解器的查询结果?

c++ - 如何同时从多个线程访问 MySQL

c++ - 错误 : "Application has failed to start because its side-by-side configuration is incorrect"