【问题标题】:What does '&' means on heap allocated pointers? [duplicate]'&' 在堆分配的指针上是什么意思? [复制]
【发布时间】:2015-04-28 14:16:03
【问题描述】:

我正在研究如何访问私人班级成员。我想更好地了解这一点。

class Sharp 
{
public:
    Sharp();
    ~Sharp();
private:
    DWORD dwSharp;
public:
    void SetSharp( DWORD sharp ) { dwSharp = sharp; };
};

Sharp::Sharp()
{
    dwSharp = 5;
}
Sharp::~Sharp()
{
}

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD a = 1;
    *(DWORD*)&a = 3;

    Sharp *pSharp = new Sharp;
    cout << *(DWORD*)&pSharp[0] << endl;

    cout << *(DWORD*)pSharp << endl;
    cout << (DWORD*&)pSharp[0] << endl;

    //pSharp = points to first object on class
    //&pSharp = address where pointer is stored
    //&pSharp[0] = same as pSharp
    //I Would like you to correct me on these statements, thanks!


    delete pSharp;
    system("PAUSE");
    return 0;
}

所以我的问题是,pSharp、&amp;pSharp 和 &amp;pSharp[0] 是什么,还请解释一下cout &lt;&lt; (DWORD*&amp;)pSharp[0] &lt;&lt; endl; 以及它为什么输出0000005。

谢谢!

【问题讨论】:

  • 虽然不是传统的,但我怀疑它几乎等同于(DWORD *) &amp;pSharp[0],它是pSharp 的第0 个元素的地址,作为指向DWORD 的指针。
  • cout &lt;&lt; (DWORD*&amp;)pSharp[0] &lt;&lt; endl; 这是为了获取存储在数组中索引0 的值,并将其解释为指向DWORD 的指针。这就是结果为5 的原因。我猜你的意思是:cout &lt;&lt; (DWORD*)&amp;pSharp[0] &lt;&lt; endl;

标签: c++ heap-memory private-members


【解决方案1】:

什么是 pSharp

它是一个指向 Sharp 对象实例的指针。

什么是 &pSharp

它是 地址 操作符(不管它是指针)。

什么是 &pSharp[0]

我不知道为什么要这样写,但它只是获取地址,而 [0] 只是从指针寻址的内存的开头开始。

为什么输出 0000005

因为dwSharp类成员在构造函数中设置为5。

【讨论】:

    【解决方案2】:

    &amp; 是“address-of”运算符——它可以应用于任何左值并给出该左值的(指向)地址。它与(一元)* 运算符相反。

    所以pSharp 是一个局部变量(指向堆内存的指针),所以&amp;pSharp 是该局部变量的地址——一个指向指针的指针。

    &amp;pSharp[0] 有点混乱,因为后缀运算符的优先级高于前缀,所以它和&amp;(pSharp[0]) 一样——[0] 取消引用指针,然后&amp; 再次获取地址,给你bakcpSharp

    【讨论】:

      猜你喜欢
      • 2014-06-25
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2012-05-09
      • 2011-01-27
      • 2012-11-02
      相关资源
      最近更新 更多