C++ 什么是(int*)?

C++ 什么是(int*)?,c++,pointers,C++,Pointers,我试图访问类成员的私有数据。在我遇到int*之前,一切都很顺利。我不明白这是什么。我想我们可以用它来创建一个新的内存地址。 我的代码: #include <iostream> using namespace std; class x{ int a,b,c,d; public: x() { a = 100; b = 200; c = 300; d = 400

我试图访问类成员的私有数据。在我遇到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;
 }

有人能帮我理解它吗?

这是一个c风格的转换,用于访问struct x作为一组整数占用的内存

它获取ob的地址,将其从“address of”即指向x的指针强制转换为指向int的指针。编译器很乐意将此强制转换分配给y,以便您可以对其进行操作,或者在本例中,将内存块打印为int。由于该结构恰好是一组int,因此即使有点不太成熟,它也可以正常工作。我猜最初的编码人员希望打印出所有4个整数,而不必依次用变量名指定每个整数。懒惰

尝试使用字符转换,即一次转换1个字节,然后打印出来。您将基本上打印出结构占用的原始内存


<> P>一个好的C++方法是创建一个操作程序。你可以在堆栈溢出中找到很多这是C风格的演员。你知道多少C++?它将指针转换为int*类型。这可能会打破我永远记不起来的现代别名规则,因此通常不会这样做。这里假设int存储为类的前几个元素,这可能是真的,也可能不是真的,这取决于类中是否有虚拟函数,或者是否使用RTTI编译。你不知道指针,但你想出了int*y=int*&ob;?酷:懒惰,是的,尤其是int*y=&ob.a;不需要施法,也不是黑客。通过此指针访问其他成员仍然很难看。