亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一個c函數問題?

一個c函數問題?

C
撒科打諢 2019-02-09 15:11:27
你好,按照您的說法,modifyvalue(),changevalue(int x)是針對全局變量的,這樣的話在第一次打印x時,首先changvalue()操作后,x的值變為11,然后經過一次自增操作,變為了12,而后調用modifyvalue函數對其進行變動,這樣的話結果應該不是12啊,modifyvalue函數在整個程序運行過程中有沒有起到作用呢?
查看完整描述

2 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

對原問題的回答,原文中lw2078的回答基本正確,這主要是一個變量作用域的問題。

為討論方便起見,源程序抄錄于下:(注釋為本人所加解釋)

1234567891011121314151617181920212223242526int x; //全局變量,不妨記為x1,因全局變量是靜態變量,所以默認初始值為0int 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=10x++;        //相當于 x3=10+1=11changevalue(x); //相當于changevalue(11),即x2=11,return x2+1(返回值被忽略)x++;        //相當于 x3=11+1=12changevalue(x); //調用 modifyvalue(),相當于x1=x1+10=10printf("First output:%dn",x); //相當于輸出 x3,即12x++;      //相當于 x3=12+1=13changevalue(x);//相當于changevalue(13),即x2=13,return x2+1(返回值被忽略) printf("Second output:%dn",x);//相當于輸出 x3,即13 modifyvalue();   //調用 modifyvalue(),相當于x1=x1+10=20printf("Third output:%dn",x);//相當于輸出 x3,即13 }

理解本問題,以下幾點要注意:

1. 調用changevalue(x)、modifyvalue()兩函數時,沒有使用返回值,即相當于兩函數的return沒有直接起作用。 

2. 定義changevalue(x)函數時,參數是值傳送,在changevalue()內x的變化不會影響到main()中的x。

3.要注意變量的作用域,尤其是同名變量的作用域。



查看完整回答
反對 回復 2019-02-27
  • 2 回答
  • 0 關注
  • 947 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號