1. 引用概念理解
#include <iostream>
using namespace std;
int main()
{
//b作为a的引用,其值和地址和a一样。
int a = 10;
int& b = a;
cout << "a: " << &a << endl;
cout << "b: " << b << endl;
cout << "b: " << &b << endl;
//可以修改b的值来影响a的值,反之亦可。
int c = 20;
b = c;
cout << "a: " << a << endl;
cout << "b: " << b << endl;
int d = 30;
a = d;
cout << "a: " << a << endl;
cout << "b: " << b << endl;
//引用可以理解为a = b, 因为变量的地址是不可以被修改的!所以 b作为a的引用时,地址就被锁死不能修改了。
//引用本质上是一个指针常量,在内存中为引用开辟了一个指针型的内存单元,指针变量修改地址的方式如下所示。
cout << "sizeof(a): " << sizeof(a) << endl;
cout << "sizeof(b): " << sizeof(b) << endl;
//指针变量e赋值新的地址的操作方式
int* e = &a;
cout << "e :" << e << endl;
e = &c;
cout << "e :" << e << endl;
return 0;
}
结果
a: 0x7ffce1a6895c
b: 10
b: 0x7ffce1a6895c
a: 20
b: 20
a: 30
b: 30
sizeof(a): 4
sizeof(b): 4
e :0x7ffce1a6895c
e :0x7ffce1a68960
2. 引用函数传参
如果编写一些小数据可以用值传递的函数传参,但是如果是数据比较大的传参,比如结构和类,使用引用参数可以大大减少内存的使用。因为值传递是拷贝一份参数,创建了新的内存,而引用是直接引用现在的变量。
#include <iostream>
#include <memory>
#include "library.h"
using namespace std;
//引用传递
void Reference(int &a, int &b) {
int temp;
temp = a;
a = b;
b = temp;
}
//如果让函数使用传递给它的信息,而不对这些信息进行修改,
//同时使用引用,则应该使用常量引用
void ReferenceConst(const int &a, const int &b);
//指针传递
void Pointer(int *a, int *b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int a = 10;
int b = 20;
Reference(a, b);
cout << "a: " << a << endl;
cout << "b: " << b << endl;
Pointer(&a, &b);
cout << "a: " << a << endl;
cout << "b: " << b << endl;
return 0;
}
结果:
a: 20
b: 10
a: 10
b: 20