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

&このコンテキストでは、2 つの異なる意味があります。

  • 宣言に配置すると、変数が参照であることを意味します。あなたの場合、参照によってパラメーターを渡します。

  • 宣言の外で、変数の前に、そのアドレスを取ります。

これらに加えて、ビットごとの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
于 2012-07-14T18:54:30.560 に答える
1

DWORD &dwUserId関数へのパラメータはDWORDへの参照です。

C ++では、&演算子はコンテキストに応じて2つのことを行います。

  • r値式で使用すると、値のアドレスを返します。例えばvoid* ptr = &myObject;
  • タイプ指定子で使用すると、タイプが「参照の」タイプになるように変更されます。これは、Javaおよび.NETでの参照の動作と似ています。例えばint& ref = myInt;

あなたの場合、あなたのdwUserIdパラメータは実際には「DWORDへの参照」タイプです。

アドレスを取得するために変更する場合は、次のようにします。

void Display(DWORD* userId) {
    cout << userId;
}

Display( &dw );

また、TCHARタイプを無効にしてください。MBCSは非推奨です。Win32Unicodeとwchar_tは未来です:)ハンガリアン記法も避けてください。これは1980年代ではありません。現在IDEがあります。

于 2012-07-14T18:57:10.387 に答える
0

関数定義でパラメーター名の前に&記号を使用すると、コンパイラーにそのパラメーターを参照として渡すように指示しているためです。つまり、そのコピーを作成しないでください。

コード内のどこかで変数名の前に使用すると、コンパイラに値の代わりに変数アドレスを使用するように指示します。

于 2012-07-14T18:56:30.243 に答える