什么是(int *)?

时间:2014-08-07 10:52:58

标签: 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 main() {
      x ob;
      int *y = (int*)&ob;
      cout << *y <<" "<< y[1]<<" "<< y[2] <<" "<< y[3] <<endl;
 }

任何人都可以帮助我理解它吗?

1 个答案:

答案 0 :(得分:3)

它是一个c样式转换,用于访问struct x占用的内存作为一组int。

它需要ob的地址,从&#39;地址转换为&#39; (即指向)x到指向int的指针。编译器愉快地将此强制转换分配给y,因此您可以对其进行操作,或者在这种情况下,将内存块打印为int。因为结构恰好是一组整数,所以即使它有点像黑客也一样。我想原始编码器想要打印出所有4个整数而不必通过变量名依次指定每个整数。懒惰。

尝试使用强制转换为char *(即一次1个字节)并打印出来。您基本上打印出结构占用的原始内存。

一个好的C ++方式是create an operator<< function返回为此输出格式化的每个变量,然后再写cout << ob << endl;