“&”在堆分配指针上意味着什么?
What does '&' means on heap allocated pointers?
我正在研究如何访问私人 class 成员。我想更好地了解这一点。
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
。
谢谢!
&
是 "address-of" 运算符——它可以应用于任何左值并给出该左值(指向)的地址。它与(一元)*
运算符相反。
所以pSharp
是一个局部变量(指向堆内存的指针),所以&pSharp
是那个局部变量的地址——一个指向指针的指针。
&pSharp[0]
有点令人困惑,因为后缀运算符的优先级高于前缀,所以它与 &(pSharp[0])
相同——[0]
取消引用指针,然后&
再次获取地址,给你 bakc pSharp
what is pSharp
它是一个指向 Sharp
对象实例的指针。
what is &pSharp
是运算符的地址(这个是指针也没关系)
what is &pSharp[0]
我不知道为什么这样写,但它只是获取地址,[0] 只是从指针寻址的内存的开头开始。
why it outputs 0000005
因为dwSharp
class成员在构造函数中设置为5
我正在研究如何访问私人 class 成员。我想更好地了解这一点。
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
。
谢谢!
&
是 "address-of" 运算符——它可以应用于任何左值并给出该左值(指向)的地址。它与(一元)*
运算符相反。
所以pSharp
是一个局部变量(指向堆内存的指针),所以&pSharp
是那个局部变量的地址——一个指向指针的指针。
&pSharp[0]
有点令人困惑,因为后缀运算符的优先级高于前缀,所以它与 &(pSharp[0])
相同——[0]
取消引用指针,然后&
再次获取地址,给你 bakc pSharp
what is pSharp
它是一个指向 Sharp
对象实例的指针。
what is &pSharp
是运算符的地址(这个是指针也没关系)
what is &pSharp[0]
我不知道为什么这样写,但它只是获取地址,[0] 只是从指针寻址的内存的开头开始。
why it outputs 0000005
因为dwSharp
class成员在构造函数中设置为5