当我们递增下面的类型转换指针时会发生什么?

What happens when we increment the below typecasted pointer?

本文关键字:什么 指针 类型转换 我们      更新时间:2023-10-16

如果我们递增指向类型转换为int类型的类的指针会发生什么?

#include<bits/stdc++.h> 
using namespace std;
class Hello{
int x=2;
int y=3;
public: 
void print(){
cout<<"This is class Hello";
}
};
int main() {
Hello *h=new Hello();
int *i=(int *)h;
i++;  //What will i point to?   
}


我的问题是,如上面的代码所示,一旦递增,我指向什么?

我还有另一个疑问——我知道记忆是连续的,记忆是连续分配给类的吗?
P.S:这个问题是在接受东芝软件采访时问我的

半官方回答:这是未定义的行为,程序在增量后所做的任何事情都是公平的游戏。说真的,任何事情。

如果你这样做,运行你的程序,它会破解你的银行账户,没关系。它没有违反你写它的方式。

不过,有一个复杂因素。符合"PoD"或"普通数据"的定义(链接中的完整定义)。这样的结构保证像 C 结构一样布局。考虑到这一点,您可能会像预期的那样将其指向y,甚至可以声称这在该语言的规范范围内。

话虽如此,为什么#@$&!(@#你会做这样的事情吗?如果两个不同的事物驻留在同一个内存位置,请使用union

这是一个未定义的行为。

实际上,新i将指向Hello分配实例开头的四个字节(sizeof(int)),并且有很多机会指向Hello.y

这个类确实可能是连续分配的。在其他情况下,可以强制实施对齐约束,并导致字段之间的填充。

相关文章: