内容來自《c和指針》,整理後友善個人了解
cdel程式可以友善的給出聲明的釋義
f is pointer to function returning int
第2個括号是函數調用操作符。第1個括号起到聚組的作用,迫使間接通路在函數調用之前進行,使f成為一個函數指針。f指向的函數傳回一個整型值。
g is pointer to function returning pointer to int
和上面的大緻相同,差別在于g指向的函數傳回一個指向整型指針
為了進一步了解“迫使間接通路在…之前進行”,再舉例說明
abc is pointer to array 0…5 of int
先對括号内的*abc求值:迫使間接通路在建立數組之前進行,使abc成為一個指針,abc指向一個數組,數組元素類型是int
f is array 0…9 of pointer to int
f is array of pointer to function returning int
先對*f[]求值:f是數組,元素類型是某種類型的指針
末尾的()是函數調用操作符
f的元素類型是函數指針,指向的函數的傳回值是整型
作為參數傳遞給另一個函數
callback function
概念:把一個函數指針作為參數傳遞給其他函數,後者将回調使用者的函數。
應用場合:
函數需要在不同時刻執行不同類型的工作
執行隻能由函數調用者定義的工作
下面這個例子就是用函數指針實作的可以自定義類型的排序函數sort
如果switch操作符的代碼是從0開始連續的整數,可以用一個轉移表來完成switch語句完成的任務
如果不是從0開始的連續整數,這種情況更合适switch語句。
因為在通路轉移表之前,還需要一系列操作把操作符轉換為合适的下标。
在轉移表,越界通路是十分危險的,測試很難發現bug究竟在哪裡,一開始就應該保證轉移表使用的下标位于合法的範圍内
使用轉移表時應添加注釋,以彌補轉移表的可讀性缺陷