永发信息网

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

答案:5  悬赏:60  手机版
解决时间 2021-02-03 11:40
  • 提问者网友:感性作祟
  • 2021-02-02 22:11
要求函数的功能是交换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)的原理,再次感谢了
最佳答案
  • 五星知识达人网友:舊物识亽
  • 2021-02-02 22:36
很负责的告诉你,没有正确答案,我怀疑你把最后一个答案给抄错了吧?应该是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的值发生交换
全部回答
  • 1楼网友:雾月
  • 2021-02-03 02:48
A B D改一下也对 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;} D) fund(int *x,int *y) {*x=*x+*y; *y=*x-*y; *x=*x-*y; } 顺便说一下; 你可能对数值传递,地址传递(A),引用传递(B) 不是很清楚,建议你去看一下
  • 2楼网友:持酒劝斜阳
  • 2021-02-03 01:55
D 是对的 么有问题 但是 函数定义 得该int *x int *y
  • 3楼网友:山河有幸埋战骨
  • 2021-02-03 00:49
应该选AAAAAAAAAAAAAAAAAA!!!!!!! 要求用指针那B就不能选了! D中的形式参数传递的不是指针。刚不能改变原变量的值。只能改变副本的值,没有意义。。。 C就明显错误了。只能让两的变量的值变成同一个值!!! 那就只能选A了,而且A是完全正确的,只要正确调用就行。。。
  • 4楼网友:冷風如刀
  • 2021-02-02 23:45
A 传递值肯定不对,那么B和D不对, C一看就不行, A是对的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯