[問題] 仍然是typoedef的問題..

看板C_and_CPP作者 (非常念舊)時間11年前 (2014/01/19 01:22), 編輯推噓5(5014)
留言19則, 6人參與, 最新討論串1/1
開發平台: 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

01/19 09:27, , 1F
把*ptr改成ptr() 或者(*ptr)()
01/19 09:27, 1F

01/19 09:40, , 2F
好奇怪,printf("%d",ptr())照理說應該會印出位址阿
01/19 09:40, 2F

01/19 10:03, , 3F
%d -> %x
01/19 10:03, 3F

01/19 10:14, , 4F
c spec "n1124.pdf", section 6.5.2及6.5.2.2
01/19 10:14, 4F

01/19 10:14, , 5F
跟%d %x沒關係
01/19 10:14, 5F

01/19 10:21, , 6F
還有6.3.2.1的第四點 以及6.5.3.2的第四點
01/19 10:21, 6F

01/19 10:39, , 7F
你理解錯了 回過頭想想 int f(){;} 你在呼叫函數時是這樣
01/19 10:39, 7F

01/19 10:39, , 8F
^ return 1
01/19 10:39, 8F

01/19 10:40, , 9F
用的 printf("%d",f()); f是函數名稱 也是一個指標
01/19 10:40, 9F

01/19 10:41, , 10F
函數本身就是一種在記憶體中的資料結構 f就是指到那個位置
01/19 10:41, 10F

01/19 10:42, , 11F
今天你指定了ptr=f;後面當然也是比照printf("%d",ptr());
01/19 10:42, 11F

01/19 10:42, , 12F
你兩篇標題都打錯
01/19 10:42, 12F

01/19 10:44, , 13F
這個構造跟 int array[3]; 很雷同 array跟array[0]都會指
01/19 10:44, 13F

01/19 10:44, , 14F
到同個位置去
01/19 10:44, 14F

01/19 10:53, , 15F
你也可以把"()"的功用當作像"*"一樣 只是一種語法規則的操
01/19 10:53, 15F

01/19 10:55, , 16F
作 不要想的太複雜
01/19 10:55, 16F

01/19 13:44, , 17F
痾 抱歉
01/19 13:44, 17F

01/19 14:52, , 18F
話說你可以按T改標題,方便之後的人尋找~
01/19 14:52, 18F

01/20 09:54, , 19F
fnctype name[3]={fun1,fun2,fun3}; 多打一顆星了吧?
01/20 09:54, 19F
文章代碼(AID): #1IsoZUHR (C_and_CPP)