我试图访问类的私有数据成员。一切都很顺利,直到我遇到int*
。我不知道它是什么。我认为这是我们可以用来创建一个新的内存地址的东西。
我的代码:
#include <iostream>
using namespace std;
class x{
int a,b,c,d;
public:
x() {
a = 100;
b = 200;
c = 300;
d = 400;
}
};
int main() {
x ob;
int *y = (int*)&ob;
cout << *y <<" "<< y[1]<<" "<< y[2] <<" "<< y[3] <<endl;
}
任何人都可以帮助我理解它吗?
答案 0 :(得分:3)
它是一个c样式转换,用于访问struct x占用的内存作为一组int。
它需要ob
的地址,从&#39;地址转换为&#39; (即指向)x到指向int的指针。编译器愉快地将此强制转换分配给y,因此您可以对其进行操作,或者在这种情况下,将内存块打印为int。因为结构恰好是一组整数,所以即使它有点像黑客也一样。我想原始编码器想要打印出所有4个整数而不必通过变量名依次指定每个整数。懒惰。
尝试使用强制转换为char *(即一次1个字节)并打印出来。您基本上打印出结构占用的原始内存。
一个好的C ++方式是create an operator<< function返回为此输出格式化的每个变量,然后再写cout << ob << endl;
。