作者kilva (嗡嗡)
看板C_and_CPP
標題[問題] typedef對函數指標的用法
時間Sun May 17 20:35:09 2015
這是我在《透視C語言指標》這一書中看到的。
書中第76頁型別定義了一函數指標,其定義方法如下:
typedef int (*fptr)(int, int);
上面的式子可定義出fptr這個新的型別(為一參數為兩個整數,回傳值為整數
的函數指標。)
這個型別可用來宣告、傳入及傳回函數指標,其中傳入函數指標看起來就像
JavaScript中傳入函數的用法一樣,感覺蠻神奇的。(差別只在於C語言對型
別的要求還是比較強。)
請問,上面typedef的用法似乎和以前看過的用法不太一樣,可以想成是與函
數指標有關的特殊用法嗎?或是有其他更一般性的規範?
謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.35.183.244
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1431866115.A.53E.html
※ 編輯: kilva (114.35.183.244), 05/17/2015 20:38:03
1F:→ bibo9901: google "c right-left rule" 05/17 20:43
感謝回答,我上網查了一下後,發現我錯在哪裡了。
原本,我學的typedef用法為
typedef 資料型別 自訂名稱;
但這反而是最簡單時的特例,真正的用法為
typedef 宣告;
如宣告一字串陣列 char *name[];
加上typedef後就變成了 typedef char *name[];
此處的name就成了一個新的字串陣列型別。
同理可推,函數指標的宣告為 int (*fptr)(int, int);
加上typedef後就變成了typedef int (*fptr)(int, int);
此處的fptr就成了一個新的函數指標型別。
※ 編輯: kilva (114.35.183.244), 05/17/2015 21:17:11
3F:→ EdisonX: 你的後半段還是在講 自定義 , 而不是宣告 , 只是自定義 05/17 21:18
4F:→ EdisonX: 的資料型別變得複雜一點點而已。 05/17 21:18
5F:→ suhorng: 可惜這個函數指標比 javascript (or any function lang) 05/17 22:00
6F:→ suhorng: 的函數傳來傳去弱多了 05/17 22:00