當前位置:
首頁 >
函数和指针
發布時間:2024/4/14
46
豆豆
聲明指向函數的指針:
void ToUpper (char *); // 把字符串轉換為大寫 void (*pf) (char *); // 指向函數的指針第一對圓括號將運算符*和pf結合在一起,這意味著pf是一個指向函數的指針。這就使得(*pf)是一個函數,并使(char *)作為該函數的參量列表,void作為返回類型。創建這類聲明最簡單的方法是注意它用表達式(*Pf)代替函數名ToUpper。
根據運算符優先級的規則,第一個括號是必須的,省略括號會導致完全不同的解釋:
void *pf (char *); // pf是返回一個指針的函數?
有了函數指針后,可以把適當類型的函數的地址賦給它。在這種場合中,函數名可以用來表示函數的地址:
void ToUpper (char *); void ToLower (char *); int round (double); void (*Pf) (char *); pf = ToUpper; // 合法,ToUpper是函數ToUpper( )的地址 pf = ToLower; // 合法,ToLower是函數ToLower( )的地址 // pf = round; // 非法,round是錯誤類型的函數 // pf = ToLower(); // 非法,ToLower()不是地址?
使用函數指針來訪問函數。有兩種邏輯上不一致的語法規則來實現這樣的操作:
void ToUpper (char *); void (*pf) (char *); char mis[] = "Nina Metier"; (*pf) (mis); // 語法1 (pf (mis); // 語法2為了保持與現有代碼的兼容性,ANSI C把兩者作為等價的形式全部接受。
?
函數指針最普遍的用法之一是作為函數的參數。例如:
void show (void (* fp) (char *), char * str) {(*fp) (str); // 把所選函數作用于str }?
函數指針的數組
可以聲明并初始化函數指針的數組:
typedef void (* V_FP_CHARP) (char *); V_FP_CHARP arpf[4] = {ToUpper, ToLower, Transpose, Dummy};?
注意:存在“函數指針的數組”,但不存在“函數數組”
?
總結下使用函數名的四種方法:
- 定義函數
- 聲明函數
- 調用函數
- 作為指針
?
轉載于:https://www.cnblogs.com/qwertWZ/archive/2013/01/23/2873785.html
總結
- 上一篇: 0-1背包(及初始化问题)
- 下一篇: 利用jqueryRotare实现抽奖转盘