你好,按照您的说法,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 关注
- 917 浏览
添加回答
举报
0/150
提交
取消