在子函数中用指针交换变量值

来源:百度知道 编辑:UC知道 时间:2024/05/10 23:42:03
要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确解决此功能的函数是
A)funa(int *x,int *y)
{int *p;
*p=*x;*x=*y;*y=*p;}
B) funb(int x,int y)
{int t;
t=x;x=y;y=t;}
C) func(int *x,int *y)
{*x=*y;*y=*x;}
D) fund(int x,int y)
{*x=*x+*y; *y=*x-*y; *x=*x-*y; }
抱歉哦,可能是我画蛇添足了,这道题没有要求必须用指针来解决,所以没用指针的不一定不对
正确答案给的是D,不过在网上查了下,确实只发现了fund(int *x,int *y)的用法.我没抄错,可能是题目出错了。希望能解释一下fund(int *x,int *y)的原理,再次感谢了

很负责的告诉你,没有正确答案,我怀疑你把最后一个答案给抄错了吧?应该是fund(int *x,int *y) 这样就有答案了,选D
A错在你只定义了个指针*p,没让他指向任何内存,就对他进行赋值操作,肯定错了
B错在参数为对象,传递的是实参的副本,函数改变的只是副本的值,不会修改实参的值
C错在当你执行*x=*y后x所指那块内存装的值已经变成y的了,再执行*y=*x已经没意义了
D就是上面说的了,怀疑你把题抄错了

晕,楼上的兄弟们,你们把指针搞清楚一点再回答好吗..

参数是指针或者引用是可以对实参进行修改的,如果是对象是不能的,如果你把把B答案改为funb(int &x,int &y),那就正确了

D 答案
D) fund(int *x,int *y)
{*x=*x+*y; *y=*x-*y; *x=*x-*y; }
*x=*x+*y将x所指地址里面的值改为x所指值+y所指值
*y=*x-*y因为现在x所指的值已经是x和y的和了
所以*x-*y得到的是原来x所指的值,并赋 给y所指的内存,所以现在y的值已经变成x的值了

*x=*x-*y这时x的值是x和y的和,而y已经是原来x的值了,相减得到原来y的值,所以x的值变成原来y的值了
x和y的值发生交换

A
传递值肯定不对,那么B和D不对,
C一看就不行,

A是对的

应该选AAAAAAAAAAAAAAAAAA!!!!!!!
要求用指针那B就不能选了!
D中的形式参数传递的不是指针。刚不能改变原变量的值。只能改变副本的值,没有意义。。。
C就明显错误了。只能让两的变量的值变成同一个值!!!
那就只能选A了,而且A是完全正确的,只要正确调用就行。。。

D 是对的
么有问题
但是 函数定义 得该int *x int *y

A B D改一下也对
A)funa(int *x,int *y)
{int p;
p=*x;*x=*y;*