看板 C_and_CPP 關於我們 聯絡資訊
開發平台: linux int fun1(){ return 1; } int fun2(){ return 2; } int fun3(){ return 3; } int main(int arc, const char *argv[]){ /*typedef int (*fnctype)(); fnctype *name[3]={fun1,fun2,fun3}; name[0]=fun1;*/ int (*ptr)(); ptr=fun1; printf("%d",*ptr); } 想要印出回傳值,但好像怪怪的.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.156.240
jackace:把*ptr改成ptr() 或者(*ptr)() 01/19 09:27
gn00618777:好奇怪,printf("%d",ptr())照理說應該會印出位址阿 01/19 09:40
pico2k:%d -> %x 01/19 10:03
jackace:c spec "n1124.pdf", section 6.5.2及6.5.2.2 01/19 10:14
jackace:跟%d %x沒關係 01/19 10:14
jackace:還有6.3.2.1的第四點 以及6.5.3.2的第四點 01/19 10:21
sardine:你理解錯了 回過頭想想 int f(){;} 你在呼叫函數時是這樣 01/19 10:39
sardine: ^ return 1 01/19 10:39
sardine:用的 printf("%d",f()); f是函數名稱 也是一個指標 01/19 10:40
sardine:函數本身就是一種在記憶體中的資料結構 f就是指到那個位置 01/19 10:41
sardine:今天你指定了ptr=f;後面當然也是比照printf("%d",ptr()); 01/19 10:42
diabloevagto:你兩篇標題都打錯 01/19 10:42
sardine:這個構造跟 int array[3]; 很雷同 array跟array[0]都會指 01/19 10:44
sardine:到同個位置去 01/19 10:44
sardine:你也可以把"()"的功用當作像"*"一樣 只是一種語法規則的操 01/19 10:53
sardine:作 不要想的太複雜 01/19 10:55
gn00618777:痾 抱歉 01/19 13:44
diabloevagto:話說你可以按T改標題,方便之後的人尋找~ 01/19 14:52
QQ29: fnctype name[3]={fun1,fun2,fun3}; 多打一顆星了吧? 01/20 09:54