#include <iostream>
using namespace std;
//值传递
void mySwap01(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
//地址传递
void mySwap02(int* a, int* b)
{
int* temp = *a;
*a = *b;
*b = *temp;
}
void mySwap03(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a = 10;
int b = 20;
mySwap01(a,b);//值传递形参不会修饰实参 因此a = 10 b = 20
mySwap02(&a,&b); //地址传递 a = 20 b = 10
mySwap03(a,b); //引用传递
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
值传递,指针传递,引用传递的区别和效率
1.值传递:有一个形参向函数所属的栈拷贝数据的过程,如果值传递的对象是类对象或是大的结构体对象,将耗费一定的时间和空间(耗时)
2.指针传递:同样有一个形参向函数所属的栈拷贝数据的过程,但拷贝的数据是一个固定为4字节的地址。(传值传的是地址值)
3.引用传递:同样有上述的数据拷贝过程,但其是针对地址的,相当于为该数据所在的地址起了一个别名。(传地址)
4.效率上讲,指针传递和引用传递比值传递效率高。一般主张使用引用传递,代码逻辑上更加紧凑清晰。
加强记忆:
这三个的区别大概是知道的,就是不知道具体细节
重点记忆这句话:有一个形参向所属的栈拷贝数据的过程