当前位置:   article > 正文

2 .c++ 引用的使用和值传递、地址传递、引用传递的区别_c 形参中地址传参与引用传参的区别

c 形参中地址传参与引用传参的区别

目录

1.c++中引用的基础使用和注意事项

 2.引用做函数参数

2.1函数传递的三种方式:值传递、地址传递、引用传递

3.引用做函数参数

4.常量的引用


1.c++中引用的基础使用和注意事项

作用:给变量起别名

基本语法: 数据类型 &别名 = 原名

引用的本质就是一个指针常量

注意: 引用一定要初始化 ,初始化过后不可更改,否则相当于给原名进行赋值操作

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a = 10;
  6. int b = 20;
  7. // 初始化引用
  8. int& c = a;
  9. int& d = a;
  10. //该步实际上是赋值操作 原始数据已经改变,不是将引用变量c重新对b引用
  11. c = b;
  12. cout << a << endl;
  13. cout << b << endl;
  14. cout << c << endl;
  15. cout << d << endl;
  16. system("pause");
  17. return 0;
  18. }

 

当对引用变量c重新更改为变量b的时候为赋值操作,变量a的值也已经更改,所以引用初始化过后不可更改

 2.引用做函数参数

2.1函数传递的三种方式:值传递、地址传递、引用传递

值传递:形参不会修饰实参

地址传递:形参会修饰实参(传入的实际就是实参地址)

引用传递:形参会修饰实参(传入的实际就是实参别名,但引用的语法更为简单)

  1. #include<iostream>
  2. using namespace std;
  3. // A 值传递
  4. // B 地址传递
  5. // C 引用传递
  6. void A(int a, int b) {
  7. int swap = a;
  8. a = b;
  9. b = swap;
  10. }
  11. void B(int * a,int* b) {
  12. int swap = *a;
  13. *a = *b;
  14. *b = swap;
  15. }
  16. void C(int& a, int& b) {
  17. int swap = a;
  18. a = b;
  19. b = swap;
  20. }
  21. int main()
  22. {
  23. //使用方法A:值传递交换两个数据
  24. int A1 = 10;
  25. int A2 = 20;
  26. A(A1, A2);
  27. cout << "地址传递不会改变实参(形参不会修饰实参)" << endl;
  28. cout << "初始实参A1 = 10 交换后实参A1 = " << A1 << endl;
  29. cout << "初始实参A2 = 20 交换实参A2 = " << A2 << endl;
  30. cout << endl;
  31. //使用方法B:地址传递交换两个数据
  32. int B1 = 10;
  33. int B2 = 20;
  34. B(&B1, &B2); //传入的时候是个地址 &变量名表示地址,所以在接受的时候需要用指针*a,*p接受地址
  35. cout << "地址传递会改变实参(形参会修饰实参,传递进入函数的时候就是实参地址)" << endl;
  36. cout << "初始实参B1 = 10 交换后实参B1 = " << B1 << endl;
  37. cout << "初始实参B2 = 20 交换后实参B2 = " << B2 << endl;
  38. cout << endl;
  39. //使用方法C:引用传递交换两个数据
  40. int C1 = 10;
  41. int C2 = 20;
  42. C(C1, C2);
  43. cout << "引用传递会改变实参(形参会修饰实参,传递进入函数的时候就是实参别名)" << endl;
  44. cout << "初始实参C1 = 10 交换后实参B1 = " << B1 << endl;
  45. cout << "初始实参C2 = 20 交换后实参B2 = " << B2 << endl;
  46. system("pause");
  47. return 0;
  48. }

3.引用做函数参数

作用:引用是可以作为函数的返回值存在

注意:1.不要返回局部变量的引用 2.如果函数的返回值是一个引用,这个函数调用可以作为左值

  1. #include<iostream>
  2. using namespace std;
  3. int& test01() {
  4. int a = 10; //局部变量存放在栈区,函数执行完毕后释放(程序保存一次)
  5. return a;
  6. }
  7. int& test02() {
  8. static int b = 10; // 静态变量存放在全局区,程序执行完毕后系统释放
  9. return b;
  10. }
  11. int main()
  12. {
  13. int& A = test01();
  14. cout << "&A= "<<A << endl;
  15. cout << "&A= " << A << endl;
  16. cout << endl;
  17. int& B = test02();
  18. cout << "&B= " << B << endl;
  19. cout << "&B= " << B << endl;
  20. cout << endl;
  21. //如果函数的返回值是一个引用,这个函数调用可以作为左值
  22. test02() = 1000;
  23. cout << "&B= " << B << endl;
  24. cout << "&B= " << B << endl;
  25. system("pause");
  26. return 0;
  27. }

4.常量的引用

作用:常量引用主要用来修饰形参,防止误操作

在函数形参列表中,可以加const修饰形参,防止形参改变实参

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/897000
推荐阅读
相关标签
  

闽ICP备14008679号