講解C++編程中Address-of運算符&的作用及用法
語法
& cast-expression
備注
一元 address-of 運算符 (&) 采用其操作數(shù)的地址。address-of 運算符的操作數(shù)可以是函數(shù)指示符,也可以是指定不是位域且不使用 register 儲存類說明符聲明的對象的左值。
address-of 運算符僅適用于具有基本、結構、類或在文件范圍級別聲明的聯(lián)合類型的變量,或僅適用于下標數(shù)組引用。在這些表達式中,可在 address-of 表達式中添加或提取不包括 address-of 運算符的常數(shù)表達式。
當應用于函數(shù)或左值時,該表達式的結果將是派生自操作數(shù)類型(右值)的指針類型。例如,如果操作數(shù)的類型為 char,則表達式的結果為指向 char 的類型指針。address-of 運算符(應用于 const 或 volatile 對象)的計算結果為 const type * 或 volatile type *,其中 type 是原始對象的類型。
在將 address-of 運算符應用于限定名時,結果將取決于 qualified-name 是否指定靜態(tài)成員。如果是這樣,則結果為指向成員聲明中指定的類型的指針。如果該成員不是靜態(tài)的,則結果為指向由 qualified-class-name 指示的類的成員 name 的指針。
以下代碼段說明了結果的不同之處,取決于該成員是否為靜態(tài)的:
// 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
}
在此示例中,由于 fValue 是靜態(tài)成員,因此表達式 &PTM::fValue 產(chǎn)生類型 float * 而不是類型 float PTM::*。
僅當明確要引用的函數(shù)的版本時,才能采用重載函數(shù)的地址。有關如何獲取特定重載函數(shù)的地址的信息,請參閱重載函數(shù)的地址。
通過將 address-of 運算符應用于引用類型,可獲得與將該運算符應用于引用綁定到的對象所獲得的結果相同的結果。例如:
// 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
以下示例使用 address-of 運算符將指針參數(shù)傳遞給函數(shù):
// 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
- 詳解C++中的函數(shù)調用和下標以及成員訪問運算符的重載
- 詳解C++編程中一元運算符的重載
- 詳解C++語言中的加法運算符與賦值運算符的用法
- C++編程中的或||、與&&、非!邏輯運算符基本用法整理
- 深入解析C++編程中的運算符重載
- 詳解C++中new運算符和delete運算符的使用
- 簡單了解C++語言中的二元運算符和賦值運算符
- 詳解C++中const_cast與reinterpret_cast運算符的用法
- 詳解C++編程中的sizeof運算符與typeid運算符
- C++編程中刪除運算符與相等運算符的使用解析
- C++編程中逗號運算符和條件運算符的使用方法講解
- 深入解析C++編程中__alignof 與__uuidof運算符的使用
- C++中的運算符和運算符優(yōu)先級總結
相關文章
Qt利用QScroller實現(xiàn)home界面滑動效果
這篇文章主要為大家詳細介紹了Qt如何利用QScroller實現(xiàn)home界面滑動效果,文中的實現(xiàn)過程講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2022-11-11
C語言數(shù)據(jù)結構進階之棧和隊列的實現(xiàn)
棧和隊列,嚴格意義上來說,也屬于線性表,因為它們也都用于存儲邏輯關系為 "一對一" 的數(shù)據(jù),但由于它們比較特殊,因此將其單獨作為一章,做重點講解2021-11-11
C++實現(xiàn)LeetCode(9.驗證回文數(shù)字)
這篇文章主要介紹了C++實現(xiàn)LeetCode(9.驗證回文數(shù)字),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-07-07
C語言實現(xiàn)航班售票系統(tǒng) C語言實現(xiàn)航班管理系統(tǒng)
這篇文章主要為大家詳細介紹了C語言實現(xiàn)航班售票系統(tǒng),C語言實現(xiàn)航班管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12
C++ 類中有虛函數(shù)(虛函數(shù)表)時 內存分布詳解
下面小編就為大家?guī)硪黄狢++ 類中有虛函數(shù)(虛函數(shù)表)時 內存分布詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12

