操作員位址: &
語法
address-of-expression
:
&
cast-expression
備註
一元定址運算子 ( &
) 會傳回其運算元的位址(也就是指標)。 運算子的運算元可以是函式指示項,或是參考非位欄位之物件的左值。
運算子位址只能套用至特定左值運算式:無論是基本、結構、類別或等位型別的變數,或是下標陣列參考。 在這些運算式中,常數運算式(不包含運算子位址的運算式)可以加入或減去運算式位址。
套用至函式或左值時,運算式的結果是衍生自運算元類型的指標類型(右值)。 例如,如果運算元的類型為 char
,則運算式的結果為 的型別指標 char
。 套用至 const
或 volatile
物件的運算子會評估為 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
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應