- 關於函數指針的問題,求解!
-
根據上圖代碼可以看到兩行輸出語句內容不同,一個沒加取值運算符,一個加了取值運算符!
上圖可以看出輸出結果是一樣的,
根據測試,不加星號與加星號與加N個星號不但不報錯而切執行結果都是一樣的。
然而普通指針一旦星號加多了就報錯,編譯不出結果,
請問這是函數指針的特性嗎?
請前輩給一個詳細真實且合理的回答!
最佳回答:
- 其實,fun的函數名與_t.function函數指針都是一樣的,即都是函數指針。fun函數名是一個函數指針常量,而_t.function是一個函數數指針變量,這是它們的關系。
- 但函數名調用如果都得如(*fun)();這樣,那書寫與讀起來都是不方便和不習慣的。所以C語言的設計者們才會設計成又可允許fun();這種形式地調用(這樣方便多了並與數學中的函數形式一樣,不是嗎?)。
- 為統一起見,_t.function函數指針變量也可以_t.function()的形式來調用。
- 賦值時,即可_t.function=&fun形式,也可_t.function=fun
函數指針調用函數是不需要解引用, 但不是不可以解引用
對於函數指針而言,解引用操作,還是這個變量的值。。。依然是個地址
所以可以加很多個*進行解引用(***_t.function)();也是OK的