一个c函数问题

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

http://zhidao.baidu.com/link?url=ffn5VtbkeCB4Flj-kAwcsY8xY8ZD7aMgyT8nluOjR1NvRTUzNuMD1wmcwSQD_-DzTKK9YSDAxikqwWLitDy_qK

对原问题的回答,原文中lw2078的回答基本正确,这主要是一个变量作用域的问题。

为讨论方便起见,源程序抄录于下:(注释为本人所加解释)

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.要注意变量的作用域,尤其是同名变量的作用域。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-13
这是一个字符串赋值函数。相当于strcpy()
至于你下面的问题:
因为首先你做的while循环是对b所指向的字符串进行赋值操作
假设你想变成b指向a所指的字符串也不行,函数体为b=a;
那也不行,因为你传进来的是指针,而不是指针的地址,你只能改变指针所指向的东西,而不能改变指针的值,除非你传进来是指针的地址
如:
int a[19], *b;
fun(a, &b);
fun(char *a, char**b)
{
*b=a;
}
这样可以本回答被网友采纳
相似回答