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。详细解答谢谢。即为什么x取了返回值而y没有... 为什么输出结果是8,4 。详细解答 谢谢。即为什么x取了返回值 而y没有 展开
 我来答
偶邵小帅
推荐于2018-03-13 · TA获得超过175个赞
知道小有建树答主
回答量:166
采纳率:0%
帮助的人:121万
展开全部
c语言中,被调函数不能直接修改主调函数中变量的值,而要让函数可以修改主调函数的变量,则被调函数需要将参数声明为指针类型,调用者需向被调用的函数传递变量的地址,所以,f()中x是声明为指针类型,调用的时候也是给x传递地址,所x能修改主函数中的值,而y传的是值,自然不能,这就是值传递和地址传递的区别,建议你多看看指针那章,希望对你有帮助。
追问
知道了 通过传送地址值,在被调用函数中直接改变调用函数的值 吧
追答
是啊,地址传递就是这意思
米饭灬枭龙
2012-09-06 · TA获得超过124个赞
知道小有建树答主
回答量:221
采纳率:0%
帮助的人:174万
展开全部
C语言几年没有看了......
首先x是个指针变量,即*X就是Main中的x = 2; 而y是一个变通的变量而已,在函数运行结束后y当中的值也就被释放了。

Function:

f:
y = 4 + 2;(6) // 这个值是要被释放的;
*x = 2 +6;(8) (*x = y + *x;) // 而这个值是不会被释放的,因为这个当中的x是个指针变量即main当中的x;

最后输出:也就是x =8 y = 4;

指针!好好看看书上的例子。
追问
还是不怎么明白x的值啊,什么main中的x啊?x是指针 但那又有什么规律的啊?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
81929154
2012-09-06
知道答主
回答量:17
采纳率:0%
帮助的人:21.6万
展开全部
首先,这个问题你要理解什么是“按值传递”,什么是“按址传递”,对于你传入的y值,函数首先对y做了一个拷贝。
先看程序:首先y = y+*x 语句之后 y的副本变为了 6 ,然后*x = *x + y 这语句之后 *x 真正变成了8,因为传递的y走的是“按值传递” ,传递的“&x”走的是“按址传递”,前者不改变真事值,后者改变真值,所以自然打印 8,4 明白吗?不明白可以继续问我!~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式