为了账号安全,请及时绑定邮箱和手机立即绑定

一个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 关注
  • 731 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信