引用&

引用本质在C++内部实现是一个指针常量,在初始化以后无能再修改
和对指针时初始化时获取变量地址不同,这里&用于在声明时,表明声明的参数的引用。

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int num1 = 10;
  6. int &num2 = num1;//num2是num1的引用,和num1一样指向同一块内存地址
  7. num2 = 20;//修改num2的值以后,num1的值也会被改变,因为两者的内存地址是一样的
  8. cout << num1 << endl;
  9. return 0;
  10. }

20

注:从上例可以看到,这种场景中,引用就是脱裤子放屁,真正的应用场景是作为函数实参。

引用作为函数实参

可以做到和指针的地址传递效果一样,可以在函数中对实参直接修改。
C++推荐采用引用的技术,因为语法简单(调用时和值传递一样),但其本质确实指针操作,故而和指针传递一样高效。

  1. #include <iostream>
  2. using namespace std;
  3. void swap(int& num1,int& num2){
  4. int temp = num1;
  5. num1 = num2;
  6. num2 = temp;
  7. }
  8. int main()
  9. {
  10. int num1 = 10;
  11. int num2 = 20;
  12. swap(num1, num2);//这里表面上是值传递,其实函数声明的是引用传递
  13. cout << num1 << endl;
  14. cout << num2 << endl;
  15. return 0;
  16. }

20 10

如果不想实参被影响,又不想进行值传递(拷贝造成资源浪费),那么也可以对引用进行const修饰:

  1. #include <iostream>
  2. using namespace std;
  3. void print(const int& num1){
  4. //引用加上了const,就不能进行赋值操作了,只能读,实现值传递的效果且兼具地址传递的高效
  5. cout << num1 << endl;
  6. }
  7. int main()
  8. {
  9. int num1 = 10;
  10. print(num1);
  11. return 0;
  12. }