傳址運算子: &
& 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