共用方式為


傳址運算子: &

& cast-expression

備註

一元 (unary) 傳址運算子 () 會使用其運算元的位址。 傳址運算子的運算元可以是左值,指定的物件,不是位元欄位並不以宣告或函式指示項註冊的儲存類別規範。

傳址運算子只能套用到基本,結構與類別的變數,或在檔案範圍層級上,或者宣告的等位型別 subscripted 陣列參考。 在這些運算式中,常數運算式不包含傳址運算子可以加入或傳址運算式相減。

當套用至函式或左值時,運算式的結果是指標型別 (r-value) 衍生自運算元的型別。 例如,如果運算元屬於型別char,運算式的結果是以型別指標的char。 傳址運算子套用至 const 或volatile物件,會評估為 consttype***** 或volatiletype*****,其中type是原始物件的型別。    

傳址運算子套用至的時限定的名稱,結果會視是否 限定名稱指定靜態成員。 如果是的話,結果會是該成員宣告中所指定型別的指標。 如果成員不是靜態的則結果將是成員的指標名稱 類別所指示的 完整類別名稱。 (請參閱主要運算式 如需詳細資訊 完整類別名稱。) 下列程式碼片段顯示依據該成員是靜態,結果的不同方式:

// 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;
}

Output

&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
}

Output

25

請參閱

參考

一元 (unary) 運算子的運算式

C + + 運算子

運算子優先順序和順序關聯性

左值使用參考宣告子: &

概念

間接取值和傳址運算子