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没有

c语言中,被调函数不能直接修改主调函数中变量的值,而要让函数可以修改主调函数的变量,则被调函数需要将参数声明为指针类型,调用者需向被调用的函数传递变量的地址,所以,f()中x是声明为指针类型,调用的时候也是给x传递地址,所x能修改主函数中的值,而y传的是值,自然不能,这就是值传递和地址传递的区别,建议你多看看指针那章,希望对你有帮助。追问

知道了 通过传送地址值,在被调用函数中直接改变调用函数的值 吧

追答

是啊,地址传递就是这意思

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-06
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是指针 但那又有什么规律的啊?

本回答被网友采纳
第2个回答  2012-09-06
首先,这个问题你要理解什么是“按值传递”,什么是“按址传递”,对于你传入的y值,函数首先对y做了一个拷贝。
先看程序:首先y = y+*x 语句之后 y的副本变为了 6 ,然后*x = *x + y 这语句之后 *x 真正变成了8,因为传递的y走的是“按值传递” ,传递的“&x”走的是“按址传递”,前者不改变真事值,后者改变真值,所以自然打印 8,4 明白吗?不明白可以继续问我!~~

...f(int y,int *x) { y=y+*x; *x=*x+y; } main() { int x=2,y=4...
X是地址传递,子函数会修改X的内容;而Y是按值传递,子函数不会修改Y的值。结果自然是X=8.Y=4.要是还不懂,翻书去。

void f( int y,int *x) {y=y+*x; *x=*x+y;} main( ) { int x=2,y=4...
在c语言中,被调函数不能直接修改主调函数中变量的值,而要让函数可以修改主调函数的变量,则被调函数需要将参数声明为指针类型,调用者需向被调用的函数传递变量的地址,所以,f()中x是声明为指针类型,调用的时候也是给x传递地址,所x能修改主函数中的值,而y传的是值,自然不能,这就是值传递...

void f(int y,int*x) {y=y+*x; *x=*x+y;} void main(
void f(int y, int *x) { y = y + *x;\/\/ 形参y,x和实参y,x存储地址不同,改变形参的值对实参没有影响。\/\/ y=y+x=6 x = *x + y;\/\/ *x的值就是主函数里实参x的值 \/\/ *x=2+4=6 } void main() { int x = 2, y = 4;f(y, &x);\/\/ f()函数中只改变了x的...

fun(int x,int y,int z){z=x*x+y*y;}main(){int a=31;fun(5,2,a);p...
也可以通过指针所指来修改地址值 也就是 void fun (int ,int int * )

...{x=x+y;y=x-y;x=x-y; printf("%d,%d,",x,y); } main() {int x=...
void fun(int x,int y)\/\/ 由于这里传入参数不是指针,引用,所以这里x,y只是main函数中x,y值的一个拷贝,所以修改后不会对main中x,y的值有影响。{x=x+y;y=x-y;x=x-y;printf("%d,%d,",x,y);} \/\/ 这里输出:3,2,main(){ int x=2,y=3;fun(x,y);\/ printf("%d,%d\\n"...

void Func(int *x,int *y) {*x^=*y; *y^=*x; *x^=*y; } 这个函数的功能...
两变量交换通常用中间变量,伪代码写作:swap(x, y){ x = t;x = y;y = t;} 我们可以通过三次异或运算完成变量的交换,而不使用中间变量,即:x = x xor y;y = y xor x;x = x xor y;xor运算满足交换律和结合律,上面的步骤可写为下面的等式 y' = y xor (x xor y) = y ...

在c++6.0中这两句话是什么意思y=y+*x; *x=*x+y
x是一个指针,可能是指向整型的也可能是指向浮点数的。y=y+*x; \/\/y的新值为原来的y加上x所指的数值,x=*x+y; \/\/x所指的数值更新为原来的数值加上y现在的值。

fun(int x,int y,int z){ z=x*x+y*y;}main( ){ int a=31;fun(5,2,a...
输出31 fun函数为值传递,不改变a的值

#include<stdio.h> int main() {int x,y; printf("请输入x的值...
你没分清字符和整数的区别

C语言中 void f(int *x,int *y)
int *x:x是一个指针变量,指向一个int型数据,x本身的值是该int型数据的地址。int x:x本身就是一个int型数据 还有 int *f(int *x,int *y) 表示返回的是int类型的指针。

相似回答