void f(int x,int y,int*z)
{*z=y-x ; }
main()
{int a=10,b=20,c=30;
f(a,b,&c);f(b,c&a);f(c,a,&b);
printf("%d,%d,%d\",a,b,c);
}
答案是
-10,-20,10
我是初学者,希望大家能帮我详细的分析下!
谢谢!!
void f(int x,int y,int*z)
{*z=y-x ; }
main()
{int a=10,b=20,c=30;
f(a,b,&c);f(b,c&a);f(c,a,&b);
printf("%d,%d,%d\",a,b,c);
}
答案是
-10,-20,10
我是初学者,希望大家能帮我详细的分析下!
谢谢!!
你好.
首先,你要明白函数的传参方式,分为值传递和地址传递. 在函数f()中形参x y是值传递,等于复制一个副本到函数中,对副本的改变并不影响其原来实参的值.
而对形参z以指针传送地址的形式.也就是说实参(如a,b,c)向形参(z)传递的是实参所指向对象的地址。既然这样,形参在函数中解引用所改动的值,同时也改动了实参所指向对象的值,因为他们本身就是指向一个地址,即同一个对象.
那么.首先调用f(a,b,&c); 则函数中x=a,y=b,z=c; z是指针,传递的是地址,所以z和c指向同一内存空间.
就等于c=y-x=20-10=10. 函数返回到main函数后, c的值为10.
第二次调用f(b,c,&a); 同上.a=c-b=10-20=-10.
第三次调用f(c,a,&b); b=-10-10=-20. 同上.
不知道有没有说明白.. 我自己都觉得有点绕.. 呵呵. 不明白的话请联系我.