dan蛋 发表于 2020-3-18 10:55:03

一个简单的错误,谁帮我看看

#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;
}

这个为啥实现不了交换值

qiuyouzhi 发表于 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的值都赋值进去

dan蛋 发表于 2020-3-18 11:03:54

qiuyouzhi 发表于 2020-3-18 10:59
先打印一下x,y的值:

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


噢噢明白了,谢谢你{:5_95:}

sunrise085 发表于 2020-3-18 11:04:42

本帖最后由 sunrise085 于 2020-3-18 11:22 编辑

因为你这种参数传递是值传递,在swap函数中的形参是新的变量,需要址传递才能完成在函数中交换原数据。

#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;
}

qiuyouzhi 发表于 2020-3-18 11:05:44

dan蛋 发表于 2020-3-18 11:03
噢噢明白了,谢谢你

那就设个最佳答案吧~

dan蛋 发表于 2020-3-18 11:10:39

qiuyouzhi 发表于 2020-3-18 10:59
先打印一下x,y的值:

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


请问第二种的写个return有两个参数应该怎么做啊

dan蛋 发表于 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吗?

qiuyouzhi 发表于 2020-3-18 11:16:47

dan蛋 发表于 2020-3-18 11:10
请问第二种的写个return有两个参数应该怎么做啊

C语言不能返回两个以上的参数。。。
要不你就在swap里打印,要不就
不用swap

dan蛋 发表于 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);
}

用函数交换怎么不行,是没有函数的执行没有返回也没有打印对吧?

sunrise085 发表于 2020-3-18 11:24:20

dan蛋 发表于 2020-3-18 11:12
#include

void swap(int x,int y);


用函数实现两个数据的交换必须要用址传递第,值传递是实现不了的。
仔细看一下我在4楼的回复。

北有樵先生 发表于 2020-3-18 11:29:21

要在函数里面改变数值,要用地址传递,即把两个变量的地址传给函数的形参

sunrise085 发表于 2020-3-18 11:30:11

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

比如这样交换值


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

你的程序是值传递方式,相当于在swap函数中创建了两个新的临时变量,然后对临时变量进行了交换,执行完函数后,那两个临时变量就消失了,对主函数中的a和b没有任何影响。
可以看一下这个帖子

dan蛋 发表于 2020-3-18 12:33:54

我觉得两个问答都很好,一个是说明了函数需要返回值或者打印,一个是说明了函数的形参用完就消失了,需要址传递才能完成在函数中交换原数据。

dan蛋 发表于 2020-3-18 12:35:57

北有樵先生 发表于 2020-3-18 11:29
要在函数里面改变数值,要用地址传递,即把两个变量的地址传给函数的形参

谢谢,我听懂了,你的方法上档次

dan蛋 发表于 2020-3-18 12:39:32

qiuyouzhi 发表于 2020-3-18 11:16
C语言不能返回两个以上的参数。。。
要不你就在swap里打印,要不就
不用swap

嗯嗯,谢谢{:5_110:}
页: [1]
查看完整版本: 一个简单的错误,谁帮我看看