输入三个整数用函数按从小到大排序,为什么我这个代码实现不了交换?

输入三个整数用函数按从小到大排序,为什么我这个代码实现不了交换?


#include<stdio.h>

void change(int a,int b)****
{
    int i;
    i=a;
    a=b;
    b=i;
}

int main()
{
    void change(int a,int b);
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    if(a>b) change(a,b);
    if(a>c) change(a,c);
    if(b>c) change(b,c);
    printf("%d %d %d",a,b,c);
    return 0;
}


您的代码中,change 函数只是简单地交换了两个局部变量 ab 的值,并不会改变 main 函数中 ab 的值。因此,在 main 函数中调用 change 函数后,ab 的值并没有被交换,而是保持原样。

要解决这个问题,您可以将 change 函数的参数改为指向整型变量的指针,这样就可以通过指针来改变 main 函数中的变量的值。修改后的代码如下所示:

#include <stdio.h>

void change(int *a, int *b)
{
    int i;
    i = *a;
    *a = *b;
    *b = i;
}

int main()
{
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);

    if (a > b)
        change(&a, &b);
    if (a > c)
        change(&a, &c);
    if (b > c)
        change(&b, &c);

    printf("%d %d %d", a, b, c);
    return 0;
}

在这个修改后的代码中,change 函数的参数为指向整型变量的指针 ab,并且在函数内部使用指针来交换变量的值。在 main 函数中,我们使用 &a&b 来传递变量的地址给 change 函数,这样在 change 函数中使用指针 ab 就可以直接改变 main 函数中的变量的值了。

将change(int a, int b)修改为change( int *a, int *b);
因为参数值不能作为返回值,需要用到指针类型!有问题可以私聊!