Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是'&';是指堆分配的指针?_C++_Heap_Private Members - Fatal编程技术网

C++ 什么是'&';是指堆分配的指针?

C++ 什么是'&';是指堆分配的指针?,c++,heap,private-members,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,

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

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;
}
class夏普
{
公众:
尖锐的();
~Sharp();
私人:
德沃德夏普;
公众:
void SetSharp(DWORD sharp){dwSharp=sharp;};
};
夏普
{
dwSharp=5;
}
夏普::~Sharp()
{
}
int _tmain(int argc,_TCHAR*argv[]
{
德沃德a=1;
*(德沃德*)&a=3;
夏普*pSharp=新夏普;
cout
&
是“address of”运算符——它可以应用于任何左值,并给出该左值的地址(指向该左值的指针)。它与(一元)
*
运算符相反

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

&pSharp[0]
有点混乱,因为后缀运算符的优先级高于前缀,所以它与
&(pSharp[0])
相同,
[0]
取消指针的引用,然后
&
再次获取地址,从而为您提供bakc
pSharp

什么是pSharp

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

什么是&pSharp

这是运算符的地址(这是指针并不重要)

什么是&pSharp[0]

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

为什么它输出0000005


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

虽然不是常规的,但我怀疑它几乎等同于
(DWORD*)&pSharp[0]
,它是
pSharp
的第0个元素的地址,作为指向-
DWORD
cout的指针