C++指针和引用
指针
指针存储的是变量的地址。*
是dereferencing,根据地址去读取值;&
是取地址符,ampersand.
定义指针的格式一般为:
datatype *var_name;
int a = 10;
int *p = &a;
直接打印p,打印的是地址;打印*p,根据地址取值;变量a就是10;&a表示a的引用。
指针的加减
在连续地址上移动
引用
引用和原变量一起变。
#include<iostream>
using namespace std;
int main()
{
int x = 10;
// ref is a reference to x.
int& ref = x;
// Value of x is now changed to 20
ref = 20;
cout << "x = " << x << endl ;
// Value of x is now changed to 30
x = 30;
cout << "ref = " << ref << endl ;
return 0;
}
引用的应用场景
第一个应用场景是函数参数的引用传递,这样可以避免复制很大的数据结构。
#include<iostream>
using namespace std;
void swap (int& first, int& second)
{
int temp = first;
first = second;
second = temp;
}
int main()
{
int a = 2, b = 3;
swap(a, b);
cout << a << " " << b;
return 0;
}
第二个应用场景是在循环中修改数据。一般在遍历的时候无法修改值。
int main()
{
vector<int> vect{1, 2, 3, 4, 5};
for(int& a: vect){
a += 1;
}
//...
}
这样vec的每个值都增加了1.
指针和引用的对比
- 指针可以为空,但是引用不行;
- 指针有一级指针、二级指针甚至多级指针,但是引用只能有一级(只能有一个&);
- 指针比引用更加强大:
- 引用一旦创建就固定了,但是指针可以更换;
- 引用在声明的时候就必须初始化,但是指针不必;
- 引用比指针更加简单,更加安全。