刚开始学C语言遇到一个问题

img


大佬们,这个代码运行的结果为什么是5-6而不是6-5😭,小白求解答

你这个swap函数是值传递,所以不会交换main函数中的a b
形参用指针或者引用可以解决

形参和实参:
定义函数里的参数叫做形参(形式参数)调用函数里的参数叫做实参(实际参数)。
分析:
函数的形参是实参的一份拷贝,上面的代码中,只是交换定义函数里的参数,只对形参进行交换当然不会实现对实参(我们实际要交换的变量)的交换。
简单来说:如果按照题主代码所写,我们只是交换了swap中a和b的值,并没有对main函数中a和b的值进行交换。
这个时候就要通过使用传指针的方法来修改函数外部的变量。
写了一下,可供题主参考:

#include<stdio.h>

void swap(int* b,int* a){
    int t = *a;
    *a = *b;
    *b = t;
}
int main()
{
    int a = 5;
    int b = 6;
    swap(&a,&b);
    printf("%d-%d\n",a,b);
    return 0;
}

运行结果如图:

img


其实解决本题的关键就是:值传递和址传递的区别。
希望对题主有所帮助,望采纳!!

鉴于你这个是C不是C++,C中没有引用这个说法,所以你的函数改成以下即可
#include<stdio.h>
void swap(int *a, int *b);
int main(){
int a = 5;
int b = 6;
swap(&a, &b);
printf("%d-%d\n", a, b);
return 0;
}

void swap(int *a, int *b){
int t = *a;
*a = *b;
*b = t;
}