什么'&'在堆分配指针上意味着什么?

时间:2015-04-28 14:16:04

标签: c++ heap private-members

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

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&pSharp&pSharp[0]是什么,请解释cout << (DWORD*&)pSharp[0] << endl;及其输出0000005的原因。

谢谢!

2 个答案:

答案 0 :(得分:2)

&是&#34;地址&#34;运算符 - 它可以应用于任何左值并给出左值的(指针)地址。它与(一元)*运算符相反。

因此pSharp是一个局部变量(指向堆内存的指针),因此&pSharp是该局部变量的地址 - 指向指针的指针。

&pSharp[0]有点令人困惑,因为后缀运算符的优先级高于前缀,因此它与&(pSharp[0])相同 - [0]取消引用指针,然后& 1}}再次获取地址,为您提供bakc pSharp

答案 1 :(得分:2)

  

什么是pSharp

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

  

什么是&amp; pSharp

它是运算符的地址(这不是一个指针)。

  

什么是&amp; pSharp [0]

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

  

为什么输出0000005

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