目前正在学习c ++而不是其他更好的问题而不是S.O.的专家。我找不到比这更完整和更好的答案。它就这样了。
DWORD dw = 5;
cout << &dw;
显示存储dw
值的地址。
但是为什么:
void Display( DWORD &dwUserId )
{
cout << dwUserId;
}
int _tmain( int argc, _TCHAR* argv[] )
{
DWORD dw = 5;
Display( dw );
}
为什么在此示例中显示dw
而不是dw
地址的值?
答案 0 :(得分:4)
&
有两种不同的含义:
放在声明中,表示变量是引用。在您的情况下,您通过引用传递参数。
在声明之外,在变量之前,它采用其地址。
除此之外,它还可以表示按位 AND 运算符
int x;
int& y = x; //y is a reference to x
int* z = &x; //& takes the address of x and assigns it to z
y & x; //bitwise AND
答案 1 :(得分:1)
DWORD &dwUserId
作为函数的参数是对DWORD的引用。
在C ++中,&
运算符根据上下文执行两项操作:
void* ptr = &myObject;
int& ref = myInt;
在您的情况下,您的dwUserId
参数实际上是“对DWORD的引用”类型。
如果您想更改它以获取地址,请执行以下操作:
void Display(DWORD* userId) {
cout << userId;
}
Display( &dw );
另外,请取消TCHAR类型。 MBCS已弃用。 Win32 Unicode和wchar_t
是未来:)也避免匈牙利表示法。这不是20世纪80年代。我们现在有IDE。
答案 2 :(得分:0)
因为当你使用&amp;在函数定义上的参数名称之前签名,告诉编译器将该参数作为引用传递,即不要复制它。
当你在代码中某处的变量名之前使用它时,你告诉编译器使用变量地址而不是他的值。