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

时间:2017-09-14 14:00:32

标签: c++

如果我们增加一个指向类型为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:在接受东芝软件

的采访时,我问过这个问题

2 个答案:

答案 0 :(得分:2)

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

如果您这样做,请运行您的程序并破解您的银行帐户,这没关系。它并没有违反你写作的方式。

但是有一个并发症。符合&#34; PoD&#34;或&#34;普通ol&#39;的定义。数据&#34; (链接中的完整定义)。这样的结构保证像C结构一样布局。考虑到这一点,您可能会按照您的预期指向y,甚至可以声称符合该语言的规范。

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

答案 1 :(得分:1)

这是一种未定义的行为。

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

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