为什么这个交换两个数值的函数第一种不起交换作用,而另外两种可以啊

第一种

#include<iostream>
using namespace std;
void swap(int a, int b)
{
    int c;
    c=a; a=b; b=c;
}
int main() 
{
    int a=3;
    int b=2;
    swap(a, b);
    cout << a << " " << b;

}

第二种

#include<iostream>
using namespace std;
void swap(int &a, int &b)
{
    int c;
    c=a; a=b; b=c;
}
int main() 
{
    int a=3;
    int b=2;
    swap(a, b);
    cout << a << " " << b;

}

第三种

#include<iostream>
using namespace std;
void swap(int *a, int *b)
{
    int *c;
    c=a; a=b; b=c;
}
int main() 
{
    int a=3;
    int b=2;
    swap(a, b);
    cout << a << " " << b;

}

因为是值传递不改变

第一种值传递:形参是实参的副本(复制、拷贝),形参值的改变不会影响实参的值
第二种引用传递:在调用函数时将实参的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实参的值。
第三种指针传递:形参是指针类型,形参作指针运算后指向的就是实参,所以会影响实参的值。

swap函数中使用的是值传递而不是引用传递。值传递函数的参数是形式参数,函数调用时被复制到函数的调用帧中,所以不会改初变量的值。

第一种,函数形参 与 实参是值传递,swap()函数执行完,形参 a b 只在函数里完成了交换,对主函数里的实参 a b 没有影响。
第二种,函数形参 与 实参是引用传递,等同于在swap()函数里直接对主函数里的实参 a b 进行交换操作,实现 a b 交换的目的。
第三种,函数新参 与 实参仍是值传递,和第一种一样,不会有作用。主函数里函数调用语句:swap(a, b);这句是错误的,正确应为:swap(&a, &b);