看下列代码的运行结果
#include "pch.h"
#include<iostream>
using namespace std;
class A
{
public:
A()
{
a = 1;
b = 2;
}
private:
int a;
int b;
};
class B
{
public:
B()
{
c = 3;
}
void print()
{
cout << c;
}
private:
int c;
};
int main(int argc, char* argv[])
{
A a;
B* pb = (B*)(&a);
pb->print();
return 0;
}
运行结果:
1
解释:
把a转成了一个长度为2的数组
那个B*指针是可以++的
只读到了第一个元素
B* pb = (B*)(&a);
这里,pb是一个数组的首地址
改成这样,输出结果就是2了
#include "pch.h"
#include<iostream>
using namespace std;
class A
{
public:
A()
{
a = 1;
b = 2;
}
private:
int a;
int b;
};
class B
{
public:
B()
{
c = 3;
}
void print()
{
cout << c;
}
private:
int c;
};
int main(int argc, char* argv[])
{
A a;
B* pb = (B*)(&a);
(pb+1)->print();
return 0;
}
不信你试试