为什么定义的运算不能用啊😭

img

img

1.你这个sort函数的形参是值传递,在sort函数里面改变n1和n2的值,并不会影响主函数里面的n1和n2的值,需要使用指针传递。
2.你这个格式也有点小问题,我给你改好了在下面。


#include <stdio.h>
void sort(int *a,int *b){
    int t;
    if( *a > *b){
        t=*a;
        *a=*b;
        *b=t;
    }
}

int main(){
    int n1,n2;
    scanf("%d%d",&n1,&n2);
    sort(&n1,&n2);
    printf("%d,%d",n1,n2);
    return 0;
}

img

第7行加大括号
sort函数不能实现数据交换,修改如下:

void sort(int *a,int *b)
{
      int t;
      if(*a>*b)
      {
          t=*a;
          *a = *b;
          *b = t;
      }
}

在函数传参的时候会发生一次值的复制,就像这里的sort函数,会定义两个新的变量a和b来接收传入的5和4,所以sort函数中实际操作的是a和b的值,a和b跟main函数中的n1和n2拥有不同的地址,所以sort函数中的操作对n1和n2没有影响。但是如果sort函数传入的是变n1和n2的地址,那么通过操作指针指向的内存来操作的话,就可以改变n1和n2的值。
所以可以把sort函数改成sort(int *a, int *b)。另外,你sort函数if和else下面的语句需要用{}扩起来,代码修改如下:

#include <stdio.h>
int sort(int *a,int *b)
{
    int t;
    if(*a > *b)
    {
        t = *a;
        *a = *b;
        *b = t;
    }else //else可以不写
    {
        *a = *a;
        *b =*b;
    }
    return 0;
}
int main()
{
    int n1,n2;
    scanf("%d%d",&n1,&n2);
    sort(&n1,&n2); //调用的时候加&符号取地址
    printf("%d,%d",n1,n2);
    return 0;
}

sort(n1,n2);
这个只是把n1,n2的值复制了给sort,执行后并不会改变n1,n2值
C语言参数那一节应该会讲到这个

你这种情况应该用指针