操作員位址: &

語法

address-of-expression
& cast-expression

備註

一元定址運算子 ( & ) 會傳回其運算元的位址(也就是指標)。 運算子的運算元可以是函式指示項,或是參考非位欄位之物件的左值。

運算子位址只能套用至特定左值運算式:無論是基本、結構、類別或等位型別的變數,或是下標陣列參考。 在這些運算式中,常數運算式(不包含運算子位址的運算式)可以加入或減去運算式位址。

套用至函式或左值時,運算式的結果是衍生自運算元類型的指標類型(右值)。 例如,如果運算元的類型為 char ,則運算式的結果為 的型別指標 char 。 套用至 constvolatile 物件的運算子會評估為 const type *volatile type * ,其中 type 是原始物件的型別。

當您清楚參考函式的版本時,您只能取得多載函式的位址。 如需如何取得特定多載函式位址的詳細資訊,請參閱 函數多 載。

將位址運算子套用至限定名稱時,結果取決於限定名稱 是否 指定靜態成員。 如果是,則結果為成員宣告中所指定類型的指標。 對於不是靜態的成員,結果是由 qualified-class-name 表示 之類別成員 名稱 的指標。 如需限定類別名稱的詳細資訊 ,請參閱 主要運算式

範例:靜態成員的位址

下列程式碼片段會根據類別成員是否為靜態,顯示運算子的位址結果有何差異:

// expre_Address_Of_Operator.cpp
// C2440 expected
class PTM {
public:
    int iValue;
    static float fValue;
};

int main() {
   int   PTM::*piValue = &PTM::iValue;  // OK: non-static
   float PTM::*pfValue = &PTM::fValue;  // C2440 error: static
   float *spfValue     = &PTM::fValue;  // OK
}

在這個範例中,因為 &PTM::fValue 是靜態成員,所以運算式 float * 會產生 float PTM::* 類型而不是 fValue 類型。

範例:參考類型的位址

將傳址運算子套用至參考類型所產生的結果,與將運算子套用至參考繫結所在的物件產生的結果相同。 例如:

// expre_Address_Of_Operator2.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main() {
   double d;        // Define an object of type double.
   double& rd = d;  // Define a reference to the object.

   // Obtain and compare their addresses
   if( &d == &rd )
      cout << "&d equals &rd" << endl;
}
&d equals &rd

範例:作為參數的函式位址

下列範例會使用傳址運算子將指標引數傳遞至函式:

// expre_Address_Of_Operator3.cpp
// compile with: /EHsc
// Demonstrate address-of operator &

#include <iostream>
using namespace std;

// Function argument is pointer to type int
int square( int *n ) {
   return (*n) * (*n);
}

int main() {
   int mynum = 5;
   cout << square( &mynum ) << endl;   // pass address of int
}
25

另請參閱

具有一元運算子的運算式
C++ 內建運算子、優先順序和關聯性
Lvalue 參考宣告子: &
間接和位址運算子