你好,按照您的說法,modifyvalue(),changevalue(int x)是針對全局變量的,這樣的話在第一次打印x時,首先changvalue()操作后,x的值變為11,然后經過一次自增操作,變為了12,而后調用modifyvalue函數對其進行變動,這樣的話結果應該不是12啊,modifyvalue函數在整個程序運行過程中有沒有起到作用呢?
2 回答

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