Re: [問題] 函數指標問題

看板C_and_CPP作者 (4545454554)時間13年前 (2011/08/05 21:24), 編輯推噓2(205)
留言7則, 5人參與, 最新討論串1/1
#include <stdio.h> int x=10; int y=20; int add_x(int y) { x=x*2; y=y*2; return x+y; } int map(int x,int(*f)(int)) { x=x*2; y=y*2; return ((*f)(2*x)+(*f)(2*y)); } int main() { int x=40,y=50; { int x=30; printf("%d",map(x,add_x)); } return 0; } ------------------------------------------------------------------------- 各位好 想請問上面這個程式的輸出 我的分析如下 一開始是 x=30 map(30,add_x) 然後是 x=30*2=60 y=20*2=40 return add_x(120)+add_x(80) add_x(120)=10*2+120*2=20+240=260 add_x(80)=10*2+80*2=20+160=180 最後 return 260+180=440 實際跑一遍 發現輸出是460 想請問 上面分析是哪邊出錯了? THX -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.129.1.36

08/05 21:31, , 1F
第二個 add_x 你忘了 global x 已經被改成 20 了
08/05 21:31, 1F

08/05 21:32, , 2F
其實這裡雖然有些 implementation defined 的地方
08/05 21:32, 2F

08/05 21:32, , 3F
....別濫用同樣的名稱...
08/05 21:32, 3F

08/05 21:32, , 4F
但碰巧在這個情形裡最終結果總是 460
08/05 21:32, 4F

08/05 21:43, , 5F
謝謝 我忽略了x被改成20
08/05 21:43, 5F

08/05 23:13, , 6F
我覺得....沒事不要寫這種code搞自己...
08/05 23:13, 6F

08/06 00:15, , 7F
給龜毛的人:編譯器不需要寫文件所以是未指定不是實作定義
08/06 00:15, 7F
文章代碼(AID): #1EE-xpIZ (C_and_CPP)