C++引用

首先引用是什么?在教程里说引用就是起别名。在我学过这一部分后觉得引用其实就是属于指针,有点像是指针的语法缩写。

怎么说呢,我认为就两点

  1. 三种传递
  2. 引用是什么,引用的本质

1、三种传递

值传递不改变实参,地址传递和引用传递改变实参

 1 #include <iostream>
 2 using namespace std;
 3 
 4 //1、值传递
 5 void mySwap01(int a,int b)
 6 {
 7     int temp=a;
 8     a=b;
 9     b=temp;
10 }
11 //2、地址传递
12 void mySwap02(int*a,int*b)
13 {
14     int temp=*a;
15     *a=*b;
16     *b=temp;
17 }
18 //3、引用传递
19 
20 //说是可以简化指针修改实参
21 void mySwap03(int &a,int &b)
22 {
23     int temp=a;
24     a=b;
25     b=temp;
26 }
27 int main()
28 {
29     int a=10,b=20;
30     int c=10,d=20;
31     int e=10,f=20;
32     mySwap01(a,b);//值传递
33     cout<<"a="<<a<<endl;
34     cout<<"b="<<b<<endl;
35     mySwap02(&c,&d);//地址传递 参数填地址
36     cout<<"c="<<c<<endl;
37     cout<<"d="<<d<<endl;
38     mySwap03(e,f);//引用传递 
39     cout<<"e="<<e<<endl;
40     cout<<"f="<<f<<endl;
41     
42     return 0;
43 }

 

2、引用是什么,引用的本质

 1 #include <iostream>
 2 using namespace std;
 3 
 4 //1、不要返回局部变量的引用
 5 //同指针,非法引用出现随机数
 6 //2、函数的调用可以做为左值
 7 
 8 //引用的本质
 9 void func(int & ref){
10     ref = 100;//ref是引用,转换为*ref=100
11 }
12 
13 int main()
14 {    
15     //引用必须初始化
16     //引用在初始化后,不可以改变
17     int a=10;
18     //引用的初始化
19     int &b=a;//b的地址与a相同,b和a的地址相同
20     //自动转换为int* const b = &a;
21     //指针常量是指针指向不可改,也说明为什么引用不可更改
22     int *c=&a;//指针c指向a的地址
23     b=*c*2;
24     cout<<"a="<<a<<endl;
25     cout<<"b="<<b<<endl;
26     cout<<"c(是个地址)="<<(int)c<<endl;
27     cout<<"&a(a的地址)="<<(int)&a<<endl;
28     cout<<"&b(b的地址)="<<(int)&b<<endl;
29     cout<<"&c(c(地址)的地址)="<<(int)&c<<endl;
30     cout<<"*c="<<*c<<endl;
31     cout<<"b==*c&&b==c?\t";
32     if(b==*c&&&b==c){
33         cout<<"Yes"<<endl;
34     }
35     else{
36         cout<<"No"<<endl;
37     }
38     
39     int d = 10;
40     
41     //自动转换为int* const ref = &d;指针常量是指针指向不可改,也说明为什么引用不可更改
42     int& ref =d;
43     ref = 30;//内部发现ref是引用,自动帮助我们转换为:*ref=20;
44     
45     cout<<"d: "<<d<<endl;
46     cout<<"ref: "<<ref<<endl;
47     
48     func(d);
49     cout<<"d: "<<d<<endl;
50     cout<<"ref: "<<ref<<endl;
51     //结论:C++推荐用引用技术,因为语法方便,引用的本质是指针常量,但是所有的指针操作编译器都帮我们做了
52     return 0;
53 }

 

posted @ 2023-09-03 10:31  HuangWQ289  阅读(8)  评论(0编辑  收藏  举报