当前位置:编程学习 > C/C++ >>

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没有
追问:知道了 通过传送地址值,在被调用函数中直接改变调用函数的值 吧还是不怎么明白x的值啊,什么main中的x啊?x是指针 但那又有什么规律的啊?
答案:在c语言中,被调函数不能直接修改主调函数中变量的值,而要让函数可以修改主调函数的变量,则被调函数需要将参数声明为指针类型,调用者需向被调用的函数传递变量的地址,所以,f()中x是声明为指针类型,调用的时候也是给x传递地址,所x能修改主函数中的值,而y传的是值,自然不能,这就是值传递和地址传递的区别,建议你多看看指针那章,希望对你有帮助。
其他:首先,这个问题你要理解什么是“按值传递”,什么是“按址传递”,对于你传入的y值,函数首先对y做了一个拷贝。
先看程序:首先y = y+*x   语句之后 y的副本变为了 6 ,然后*x = *x + y   这语句之后 *x 真正变成了8,因为传递的y走的是“按值传递” ,传递的“&x”走的是“按址传递”,前者不改变真事值,后者改变真值,所以自然打印 8,4  明白吗?不明白可以继续问我!~~ 

上一个:c语言中 \x0 是什么意思
下一个:谁知道这段语句代表什么意思?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,