c++中函数传参有三种方式分别为:
1.传值调用
直接将变量名传入函数,然后用对应的变量类型接收,如myswap1.
但是在这种传递方式中,形参的变化不会对实参产生影响(本质上是因为形参已经是独立的临时变量,和实参已经毫无关心,在myswap1运行结束后形参变量就被释放)。
2.传址调用
传址调用其实就是传指针(指针就是地址),由于传入的是实参地址,所以形参本质上也是实参,(都是一个地址,指向的自然是一个变量),所以对形参的任何操作,实参也会跟着改变。
3.引用做函数形参
引用就是给你的变量起个别名,实际与原变量都指向同一地址,不会再开辟空间,所以可以节省开销。对别名的操作自然也会改变实参。
下面可以用一个数值互换代码来分别测试这三种情况:
#include<iostream>
using namespace std;
void myswap1(int x,int y)
{
int temp = 0;
temp = x;
x = y;
y = temp;
}
void myswap2(int & x, int &y)
{
int temp;
temp = x;
x = y;
y = temp;
}
void myswap3(int * x, int*y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
void test01()
{
int a = 3;
int b = 5;
cout << a << " " << b << endl;
myswap1(a, b);
cout << "sawp1: " << a << " " << b << endl;
}
void test02()
{
int a = 3;
int b = 5;
cout << a << " " << b << endl;
myswap2(a, b);
cout << "sawp2: " << a << " " << b << endl;
}
void test03()
{
int a = 3;
int b = 5;
cout << a << " " << b << endl;
int *p1 = &a;
int *p2 = &b;
myswap3(p1, p2);
cout << "sawp3: " << a << " " << b << endl;
}
int main()
{
test01();
test02();
test03();
system("pause");
return 0;
}
运行结果如图:
有任何疑问欢迎在评论区讨论