一个c函数问题?

你好,按照您的说法,modifyvalue(),changevalue(int x)是针对全局变量的,这样的话在第一次打印x时,首先changvalue()操作后,x的值变为11,然后经过一次自增操作,变为了12,而后调用modifyvalue函数对其进行变动,这样的话结果应该不是12啊,modifyvalue函数在整个程序运行过程中有没有起到作用呢?

撒科打诨
浏览 918回答 2
2回答

犯罪嫌疑人X

对原问题的回答,原文中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.要注意变量的作用域,尤其是同名变量的作用域。
打开App,查看更多内容
随时随地看视频慕课网APP