看看這個:
這是因為在 c/c++ 中總是使用函式指標的形式來呼叫函式。即使在函式呼叫中使用的是函式指示符(代表函式型別),也會被轉換為函式指標使用,這就是預設的 function-to-pointer 轉換。
例如,樓主程式中的 test 函式可以直接使用函式指示符形式來呼叫:test( 9 );。然而,在這裡的函式指示符 test 其實被編譯器自動轉換為了函式指標來使用,既從函式型別轉換為了函式指標型別,最終是使用函式指標的形式來完成對函式呼叫的。
程式中的 fp( 9 ); 是直接使用函式指標 fp 來呼叫。既然 fp 已經是函式指標了,所以在型別上就不需要任何轉換了。
(*fp)( 9 ); 也是合法的函式呼叫。在這裡,fp 是函式指標,所以 *fp 是對於函式的引用,是函式型別。根據標準規定的 function-to-pointer 轉換又把 *fp 由函式型別轉換為了函式指標型別,所以實際上 (*fp)( 9 ); 相當於 fp( 9 ); 這種直接的函式指標呼叫方式。
另外,test 函式也可這樣呼叫:(*test)( 9 );。可以這樣來理解:根據 function-to-pointer 轉換規定首先 test 由函式型別轉換為函式指標,那麼 *test 表示的又是函式型別,最後又根據 function-to-pointer 轉換為函式指標來呼叫函式。這其實和 (*fp)( 9 ); 是等價的。
甚至 test 函式還可以這樣呼叫:(**test)( 9 );、(***test)( 9 );、(****test)( 9 ); 等等,或者函式指標形式:(**fp)( 9 );、(***fp)( 9 );、(****fp)( 9 ); 等等。對此的理解可參看上段中的分析。
從上面的分析可以看出,函式呼叫的時候可以使用函式指標的方式,也可以使用函式指示符的方式。不過,後者會由編譯器自動轉換為前者的形式,即函式指標的形式。和指向物件的指標相比,這是函式指標乙個比較特殊的地方。
關於指標問題
一 概述 在用陣列儲存模型時,發現陣列裡面的資料都一樣,就是在新增資料時出錯 二 問題 查詢資料 void select else 列印陣列 三 原因分析 兩個元素指向同一片位址 陣列在儲存資料時,並沒有儲存數具體的數值,而是儲存位址。model裡面屬性的值在變,位址沒有變。類似 int a 1 i...
關於指標變數的問題
關於指標變數的問題 int a 12 在儲存器中開闢乙個儲存區域,佔據4個位元組,比如首位址是1234,int p 定義乙個指標變數 p a p指向a,就是說將a的位址儲存在p中 在這個過程中,變數a是將首位址1234,儲存在指標變數p中嗎?輸出 a的值都是十進位制的嗎?在變數a中12的二進位制是0...
關於指標的賦值問題
void copy 2th to sdram void 目的是將2048到4096的記憶體 拷貝到0x30004000 上 這時,pdwdest 0x30004000,也就是說pdwdest存放了乙個4位元組的int型,在進行解引用時,指向0x30004000 pdwdest 由於是int型 pdw...