C++ 引用
C++的引用个人感觉像是C#/Java等高级语言的传址的开端。也是C的指针概念上的一个拓展。现对C++引用进行一定的介绍:
一, 引用的申明
#include<iostream>usingnamespacestd;intmain(){inta=1;int&po=a;po=2;cout<<"a的值为:"<<a<<endl;return0;}
得到的结果为:
可以看到 , 当对po进行赋值2的时候,a的值也变为了2.其实po和a指向的是同一块内存。这里po和指针(*)很像。
引用(&)和 指针(*)的区别:
① ,引用& 申明时就必须初始化。如声明int的引用 int &po = a;直接要为其赋值a(int类型)。
② ,引用没有地址的概念(没有保存地址 , 而是直接指向内容 , 所以它的效率比指针要高)。
二 , 其他类型的引用申明
①:数组:
#include<iostream>usingnamespacestd;intmain(){inta[2][3];int(&po)[2][3]=a;//申明一个引用,必须要对其进行初始化po[0][1]=3;cout<<"a[0][1]的值为:"<<*((*a)+1)<<endl;return0;}
得到的结果为:
注意数字的引用申明
②:指针:
#include<iostream>usingnamespacestd;intmain(){inta=4;int*p=&a;int*(&po)=p;*po=5;//此时,引用po和指针p的用法是一样的cout<<"a的值为:"<<*p<<endl;cout<<"a的值为:"<<*po<<endl;return0;}
执行结果为:
关于结构体的申明和int是一样的额
(重点)关于引用参数:
#include<iostream>usingnamespacestd;voidfun(int&a){a=2;}intmain(){inta=1;fun(a);cout<<"a的值为:"<<a<<endl;return0;}
fun函数如果用C#来写的话 , 应该是 fun( ref int a ), 和C#一样,当对fun的参数a进行重赋值时,main中实参a的值也会发生改变这和C的指针效果是一样的,不一样的是:
C++传引用比C传指针的效率要高 , 因为引用没有保存地址,它直接指向内容。我把C的传指针实现一下:
#include<iostream>usingnamespacestd;voidfun(int*a){*a=2;}intmain(){inta=1;fun(&a);cout<<"a的值为:"<<a<<endl;return0;}
当然, 如果要使用C++的话 , 最好是用引用 , 效率高啊。。。。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。