为什么下面这个程序无法交换a,b的值?

#include <stdio.h>
int change(int a, int b)
{
int tmp =a;
a=b;
b=tmp;
return a,b;
}

int main()
{
int a=5;
int b=3;
change(a,b);
printf("num a =%d\n num b =%d\n",a,b);
return 0;
}

因为你这样写只是把 a,b 的值复制一份传进去 change() 函数,并不会改变 a b 的值,因为 change() 函数里面的 a b 的作用域只在这个函数,这个函数执行完它们就被消灭了,不会影响到主函数里面 a b 的值,只有传地址进去才会改变

比如这样

#include <stdio.h>
void change(int* a, int* b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
int main()
{
    int a=5;
    int b=3;
    change(&a,&b);
    printf("num a =%d\n num b =%d\n",a,b);
    return 0;
}