函式指標的解引用

2021-06-17 16:14:57 字數 1174 閱讀 9769

宣告函式的引用:

int f( double );  

int (* const pf)(double) = f;       // pf是指向函式f()的常量指標  

int (&rf)(double) = f;               // rf是函式f()的引用 

從編碼實踐角度來看,指向函式的常量指標和函式的引用並無很大不同。除了一點,那就是指標可以顯式地使用反引用語法,而對引用是不能使用顯式反引用語法的,除非它被隱式轉換成指向函式的指標 。

a = pf

( 12.3 );                      // 直接用函式指標名呼叫函式  

a = (*pf)(12.3);                    // 使用反引用語法也是可以的  

a = rf

( 12.3 );                      // 通過引用呼叫函式  

a = f

( 12.3 );                       // 直接呼叫函式本身  

a = (*rf)(12.3);         // 把引用(隱式)轉換成指向函式的指標,再使用反引用語法  

a = (*f)(12.3);          // 把函式本身(隱式)轉換成指向函式的指標,再使用反引用語法 

(注:此處六行**主要想說明,c++的函式呼叫很靈活,無論是通過使用函式名本身、指向函式的指標還是函式的引用來呼叫函式,都既可以用名字本身,也可以使用反引用語法。儘管後兩行在語法上其實是經過了乙個隱式型別轉換,因而會帶來效率上的損失。)

這是《c++語言99個常見程式設計錯誤》錯誤5中的一段話。

說反引用可能有點莫名奇妙,其實它就是解引用,只是翻譯過來不同罷了。

上面宣告函式指標時,

int(* const pf)(double)易可為int(* const pf)(double) = &f; 此處的原因為:將乙個函式的位址初始化或賦值給乙個指向函式的指標時,無需顯式地取得函式位址,編譯器知道隱式地獲得函式的位址,即在此種情況下,&操作符是可選的,通常省略不用。

然後對於引用的解引用,由編譯器隱式轉換成指向函式的指標,否則編譯不通過。

當然要是真想編無聊的**,後兩句可以類似寫成這樣 a

= (*****************rf)(12.3);    其中意思參考上面你應該懂的。 

指標解引用

所有的變數使用到這一點,在本教程中有乙個共同點 該變數必須先宣告在編譯的時候。這導致了兩個問題 第一,很難有條件地宣告乙個變數,把它在乙個if語句塊之外 在這種情況下,它會超出範圍時,塊的結束 第二,所有陣列的大小必須決定在執行程式之前。例如,以下是不合法的 1 2 3 4 5 cout how m...

傳指標and解引用

乙個函式的改變要影響另乙個函式需要兩個條件 1 傳指標。2 解引用。通過交換a和b數值的例項來說明其重要性 在主函式中輸入a和b的值 int a 10 int b 20 預期輸出結果為a 20 b 10。明顯與預期結果不符。原因 沒有傳指標!具體操作為 也與預期結果不符。原因 沒有解引用。與預期相符...

關於C中指標的引用,解引用與脫去解引用

在指標操作中的意義 1 大家都知道在寫int p 時,可以宣告乙個指標。很少人知道 在c c 中還有乙個名字就是 解引用 他的意思就是解釋引用,說的通俗一點就是,直接去尋找指標所指的位址裡面的內容,此內容可以是任何資料型別,當然也可以是指標 這就是雙重指標,後面將會討論 需要注意的是,在變數宣告的時...