3ds经典游戏:简单C问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/02 04:33:39
(11) 有以下程序
void f( int y,int *x)
{y=y+*x; *x=*x+y;}
main( )
{ int x=2,y=4;
f(y,&x);
printf(“%d %d\n”,x,y);
}
执行后输出的结果是 8 4。能详细解释下马?

你首先得了解指针的意思,这是一个很简单的题目,建议你先把指针学懂了,再自己看看。 我一会给你解释!
<br>
f()是个函数 其参数是y和*x
只所以用*x,是表示*x参数是从函数外部引进的一个变量.
f()做2件事: y=y+*x , *x=*x+y
也就是y+=*x, *x+=y;
主函数main()里面定义了2个变量x=2,y=4;
运行f(y,&x);
也就是将函数中的y变成了6,而将函数外的x变成了*x=*x+y
这里的y是函数内部的y,所以是6。因为是*x,其意思就是直接对全局变量x进行操作,所以x变成了8,但是f(y,&x);只能对函数内部的y操作,无法操作主函数中的y,所以输出的时候y仍然为4
这里牵涉到了变量的有效区域。
我建议你把变量,函数,指针,这几章再多看看。
谢谢

你那个题目的符号不是很清楚,能将那符号再说清一点吗?
我也是学C的,不敢说学得很好,但这点还是没问题的!请将问题中的符号再说细点,看得不是很清楚!将问题写清楚发到我的邮箱,我会尽快回复!nixiangyun@126.com

函数体中y是数值传递 x为地址传递

经过函数体内的 运算后 y的值还是int y=4的值
而x的值则为*x地址的值 即 6=4+2,8=6+2
所以x 为8
输出8,4

因为y在传值的时候,传的是形参,也就是将main的y复制给f中的y.
在函数f 中y虽然改变了,但f中的y和main中的y没有直接联系,执行结束后,f中的y也就被释放了,没有影响main()函数的y的值.

而x在传值的时候是以地址的形式传过去的,也就是说f中的x实际就是main中的x,两者是同一个东西,修改的是对应地址的数值,所以会改变x的值.