0%

C++ 指针与引用

本文详细探讨了C++中指针与引用的区别与应用场景。指针可以为空,支持偏移操作,常用于修改变量和高效传递对象;而引用必须初始化,不可为空,且不支持四则运算,但同样能直接修改对象并减少复制成本。文章通过代码示例展示了指针和引用的具体用法,帮助读者理解两者的核心差异及其在编程中的实际应用。

C++指针与引用

指针

  • 可以为空(万恶之首)
  • 可以做指针的偏移操作
  • 可以用做修改一个变量
  • 可以用来用来快速传递一个对象,没有复制的成本(只有指针复制的成本)
    见下面代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int f1(int* i) {
*i = 2;
}

int f2(int i){
i = 3;
}

int main(){
int num = 0;
f1(&num);
std::cout << num << std::endl; ///< 此处num为2
f2(num);
std::cout << num << std::endl; ///< 此处num仍为2
}

引用

  • 引用同指针一样可以直接修改对象本身,减少传递对象的复制成本
  • 引用不可为空,即创建必须初始化
  • 引用不能同指针一样,进行四则运算
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void f1(int& num) {
num = 100;
}

int main() {
int i = 0;
int &r = i;
r = 1;
std::cout << i << std::endl; ///< i这里为1
std::cout << r << std::endl; ///< r这里为1
f1(r);
std::cout << i << std::endl; ///< i这里为100
std::cout << r << std::endl; ///< r这里为100
}

详情可见What are the differences between a pointer variable and a reference variable in C++?