gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:51 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com