如果我们增加一个指向类型为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:在接受东芝软件
答案 0 :(得分:2)
半官方回答:这是未定义的行为,并且在增量为公平游戏之后,程序会执行任何。说真的,任何事情。
如果您这样做,请运行您的程序并破解您的银行帐户,这没关系。它并没有违反你写作的方式。
但是有一个并发症。符合&#34; PoD&#34;或&#34;普通ol&#39;的定义。数据&#34; (链接中的完整定义)。这样的结构保证像C结构一样布局。考虑到这一点,您可能会按照您的预期指向y
,甚至可以声称符合该语言的规范。
话虽如此,为什么#@ $&amp;!(@#你会做这样的事情吗?如果你有两个不同的东西要驻留在同一个内存位置,请使用union
。
答案 1 :(得分:1)
这是一种未定义的行为。
实际上,新的i
会将四个字节(sizeof(int)
)指向已分配的Hello
实例的开头,并有很多机会指向Hello.y
。
这个班的确可能是连续分配的。在其他情况下,可以强制执行对齐约束并导致字段之间的填充。