鱼C论坛

 找回密码
 立即注册
查看: 1020|回复: 14

[已解决]一个简单的错误,谁帮我看看

[复制链接]
发表于 2020-3-18 10:55:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>

void swap(int x,int y);
void main()
{
        int a=10,b=20;
        printf("a=%d,b=%d",a,b);
        swap(a,b);
        printf("a=%d,b=%d",a,b);
}

void swap(int x,int y)
{
   int t ;
   t=x;x=y;y=t;
}

这个为啥实现不了交换值
最佳答案
2020-3-18 11:24:20
dan蛋 发表于 2020-3-18 11:12
#include

void swap(int x,int y);

用函数实现两个数据的交换必须要用址传递第,值传递是实现不了的。
仔细看一下我在4楼的回复。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-18 10:59:46 | 显示全部楼层
先打印一下x,y的值:
#include<stdio.h>

void swap(int x,int y);
void main()
{
        int a=10,b=20;
        printf("a=%d,b=%d",a,b);
        swap(a,b);
        printf("a=%d,b=%d",a,b);
}

void swap(int x,int y)
{
   int t;
   t=x;
   x=y;
   y=t;
   printf("%d %d\n", x,y);
}
可以看出,x和y已经交换了,可是并没有返回出去
有两种解决办法:
1,把输入输出都放进swap里
2,在最后写一个return,把a和b的值都赋值进去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-18 11:03:54 | 显示全部楼层
qiuyouzhi 发表于 2020-3-18 10:59
先打印一下x,y的值:

可以看出,x和y已经交换了,可是并没有返回出去

噢噢明白了,谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 11:04:42 | 显示全部楼层
本帖最后由 sunrise085 于 2020-3-18 11:22 编辑

因为你这种参数传递是值传递,在swap函数中的形参是新的变量,需要址传递才能完成在函数中交换原数据。
3.jpg
#include<stdio.h>
void swap(int *x,int *y);
void main()
{
        int a=10,b=20;
        printf("a=%d,b=%d\n",a,b);
        swap(&a,&b);
        printf("a=%d,b=%d\n",a,b);
}

void swap(int *x,int *y)
{
   int t ;
   t=*x;*x=*y;*y=t;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 11:05:44 | 显示全部楼层
dan蛋 发表于 2020-3-18 11:03
噢噢明白了,谢谢你

那就设个最佳答案吧~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-18 11:10:39 | 显示全部楼层
qiuyouzhi 发表于 2020-3-18 10:59
先打印一下x,y的值:

可以看出,x和y已经交换了,可是并没有返回出去

请问第二种的写个return有两个参数应该怎么做啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-18 11:12:33 | 显示全部楼层
dan蛋 发表于 2020-3-18 11:10
请问第二种的写个return有两个参数应该怎么做啊

#include<stdio.h>

void swap(int x,int y);
void main()
{
        int a=10,b=20;
        printf("a=%d,b=%d",a,b);
        swap(a,b);
        printf("a=%d,b=%d",a,b);
}

void swap(int x,int y)
{
   int t ;
   t=x;x=y;y=t;
}


如果main函数中的两个printf都不取消,不再swap函数中打印的话,只能return吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 11:16:47 | 显示全部楼层
dan蛋 发表于 2020-3-18 11:10
请问第二种的写个return有两个参数应该怎么做啊

C语言不能返回两个以上的参数。。。
要不你就在swap里打印,要不就
不用swap
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-18 11:23:42 | 显示全部楼层
sunrise085 发表于 2020-3-18 11:04
因为你这种参数传递是值传递,在swap函数中的形参是新的变量,需要址传递才能完成在函数中交换原数据。

你的程序我懂了,必须交换地址吗,如果交换值可以吗。我对我那个错误还是有点模糊

比如这样交换值
#include<stdio.h>
void main()
{
        int t, a=10,b=20;
          t=a;a=b;b=t
        printf("a=%d,b=%d",a,b);
}

用函数交换怎么不行,是没有函数的执行没有返回也没有打印对吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 11:24:20 | 显示全部楼层    本楼为最佳答案   
dan蛋 发表于 2020-3-18 11:12
#include

void swap(int x,int y);

用函数实现两个数据的交换必须要用址传递第,值传递是实现不了的。
仔细看一下我在4楼的回复。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 11:29:21 | 显示全部楼层
要在函数里面改变数值,要用地址传递,即把两个变量的地址传给函数的形参
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-18 11:30:11 | 显示全部楼层
dan蛋 发表于 2020-3-18 11:23
你的程序我懂了,必须交换地址吗,如果交换值可以吗。我对我那个错误还是有点模糊

比如这样交换值

这不是交换地址啊。只是吧地址作为参数传递到函数swap中去,然后在swap函数中对a和b进行交换操作。

你的程序是值传递方式,相当于在swap函数中创建了两个新的临时变量,然后对临时变量进行了交换,执行完函数后,那两个临时变量就消失了,对主函数中的a和b没有任何影响。
可以看一下这个帖子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-18 12:33:54 | 显示全部楼层
我觉得两个问答都很好,一个是说明了函数需要返回值或者打印,一个是说明了函数的形参用完就消失了,需要址传递才能完成在函数中交换原数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-18 12:35:57 | 显示全部楼层
北有樵先生 发表于 2020-3-18 11:29
要在函数里面改变数值,要用地址传递,即把两个变量的地址传给函数的形参

谢谢,我听懂了,你的方法上档次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-18 12:39:32 | 显示全部楼层
qiuyouzhi 发表于 2020-3-18 11:16
C语言不能返回两个以上的参数。。。
要不你就在swap里打印,要不就
不用swap

嗯嗯,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 21:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表