首先引用是什么?在教程里说引用就是起别名。在我学过这一部分后觉得引用其实就是属于指针,有点像是指针的语法缩写。
怎么说呢,我认为就两点
- 三种传递
- 引用是什么,引用的本质
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 }
标签:10,temp,int,C++,传递,引用,指针 From: https://www.cnblogs.com/hwq123/p/17674586.html