为什么参考可能作为对象?

时间:2012-07-14 18:51:50

标签: c++ const-reference

目前正在学习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地址的值?

3 个答案:

答案 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 ++中,&运算符根据上下文执行两项操作:

  • 在r值表达式中使用时,它返回值的地址。例如void* ptr = &myObject;
  • 在类型说明符中使用时,它将类型修改为“引用”类型。这类似于Java和.NET中的引用。例如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;在函数定义上的参数名称之前签名,告诉编译器将该参数作为引用传递,即不要复制它。

当你在代码中某处的变量名之前使用它时,你告诉编译器使用变量地址而不是他的值。