第一种
#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);