你好,按照您的說法,modifyvalue(),changevalue(int x)是針對全局變量的,這樣的話在第一次打印x時(shí),首先changvalue()操作后,x的值變?yōu)?1,然后經(jīng)過一次自增操作,變?yōu)榱?2,而后調(diào)用modifyvalue函數(shù)對其進(jìn)行變動,這樣的話結(jié)果應(yīng)該不是12啊,modifyvalue函數(shù)在整個(gè)程序運(yùn)行過程中有沒有起到作用呢?
2 回答

犯罪嫌疑人X
TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊
對原問題的回答,原文中l(wèi)w2078的回答基本正確,這主要是一個(gè)變量作用域的問題。
為討論方便起見,源程序抄錄于下:(注釋為本人所加解釋)
1234567891011121314151617181920212223242526 | int x; //全局變量,不妨記為x1,因全局變量是靜態(tài)變量,所以默認(rèn)初始值為0 int modifyvalue() { return (x+=10); } //此處的x為x1 int changevalue( int x) //在此定義的x,不妨記為x2,因?yàn)榕cx1同名,本函數(shù)內(nèi)x1不起作用 { return (x+=1);} //相當(dāng)于return x2+=1 void main() //在此定義的x,不妨記為x3,因?yàn)榕cx1同名,本函數(shù)內(nèi)x1不起作用 { int x=10; //相當(dāng)于int x3=10 x++; //相當(dāng)于 x3=10+1=11 changevalue(x); //相當(dāng)于changevalue(11),即x2=11,return x2+1(返回值被忽略) x++; //相當(dāng)于 x3=11+1=12 changevalue(x); //調(diào)用 modifyvalue(),相當(dāng)于x1=x1+10=10 printf ( "First output:%dn" ,x); //相當(dāng)于輸出 x3,即12 x++; //相當(dāng)于 x3=12+1=13 changevalue(x); //相當(dāng)于changevalue(13),即x2=13,return x2+1(返回值被忽略) printf ( "Second output:%dn" ,x); //相當(dāng)于輸出 x3,即13 modifyvalue(); //調(diào)用 modifyvalue(),相當(dāng)于x1=x1+10=20 printf ( "Third output:%dn" ,x); //相當(dāng)于輸出 x3,即13 } |
理解本問題,以下幾點(diǎn)要注意:
1. 調(diào)用changevalue(x)、modifyvalue()兩函數(shù)時(shí),沒有使用返回值,即相當(dāng)于兩函數(shù)的return沒有直接起作用。
2. 定義changevalue(x)函數(shù)時(shí),參數(shù)是值傳送,在changevalue()內(nèi)x的變化不會影響到main()中的x。
3.要注意變量的作用域,尤其是同名變量的作用域。
- 2 回答
- 0 關(guān)注
- 944 瀏覽
添加回答
舉報(bào)
0/150
提交
取消