0

目前正在学习 c++,没有比向 SO 的专家提问更好的地方了,我找不到比这里更完整和更好的答案。就这样。

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地址?

4

3 回答 3

4

&在这种情况下有两种不同的含义:

  • 放在声明中,这意味着变量是一个引用。在您的情况下,您通过引用传递参数。

  • 在声明之外,在变量之前,它获取其地址。

除此之外,它还可以表示按位运算符

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
于 2012-07-14T18:54:30.560 回答
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 Unicodewchar_t是未来 :) 还要避免使用匈牙利符号。这不是 1980 年代。我们现在有 IDE。

于 2012-07-14T18:57:10.387 回答
0

因为当您在函数定义的参数名称前使用 & 符号时,您是在告诉编译器将该参数作为引用传递,即不要复制它。

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

于 2012-07-14T18:56:30.243 回答