引用的作用

引入

C语言中函数有两种传参的方式: 传值和传址。以传值方式, 在函数调用过程中会生成一份临时变量用形参代替, 最终把实参的值传递给新分配的临时变量即形参。 它的优点是避免了函数调用的副作用, 确无法改变形参的值。 如果要改变实参的值, 只 能通过指针传递。

 1 void swap (int left, int right)
 2 {
 3 int temp = left;
 4 left = right;
 5 right = temp;
 6 }
 7 void swap (int *_pleft , int * _pRight)
 8 {
 9 assert (NULL ! = _pleft && NULL ! = _pRight) ;
10 int iTemp = * _pleft;
11 *_pleft = * _pRight;
12 *_pRight = iTemp;13 }

指针可以解决问题, 但不是很形象友好, 不安全, 因 此C++中 引 入了 一种新的符合类型--引用 。

引用概念

引用(reference)不是新定义一个变量, 而是给已存在的对象取了 一个别名 ,引用类型,引用另外一种类型。 编译器不会为引用对象新开辟内存空间, 它和它引用的对象共用同一块内存空间 。

1 int num = 110;
2 int &number = num;         //number指向num(是num的另外一个名字)

一般在初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时程序把引用和他的初始值绑定在一起,而不是将初始值拷贝给引用。一旦初始化完成引用家将和他的初始对象一直绑定在一块。因为无法将引用重新绑定到另外一个对象上,因此引用必须初始化。

引用即别名

引用并非对象,相反的,它只是为一个已经存在的对象所起的另外一个名字。定义一个引用之后,对其进行的所有操作都是在与之绑定的对象上进行的:

1 number = 120;      //把120赋给number指向的对象,此处即是赋给了num
2 int tmp = number; //与tmp = num执行结果一样

为引用赋值,实际上是把值赋给了与引用绑定的对象。获取引用的值,实际上是获取了与引用绑定的对象的值。同理,以引用作为初始值,实际上是以引用绑定的对象作为初始值。

引用的定义

允许在一条语句中定义多个引用,其中每个引用标识符都必须以&开头;

因为无法将引用重新绑定到另外一个对象上,因此引用必须初始化。

因为引用本身不是一一个对象,所以不能定义引用的引用。

一个变量可以有多个引用,而一个引用只能给一个变量对象 。

引用的类型要和与之绑定的对象严格匹配(不严谨)。

引用只能绑定在对象上而不能和字面值或某个表达式计算的记过绑定在一起。

1 int i1 = 10, i2 = 20 ;     //i1和i2都是int型
2 int &r1 = i1, &r2 = i2;    //r1和r2都是引用
3 int &r3 ;                  //报错:引用必须初始化
4 int &r4 = i1, &r5 = i2;    //r1, r4同为i1的引用,r2, r5同为i2的引用
5 int &r4 = i2, &r5 = i1;    //报错:r4不能同时分别为i1和i2的引用
6 int &r6 = 10;              //报错:引用类型的初始值必须是一个对象
7 double i3 = 3.14;
8 int &r7 = i3;              //报错:此处引用类型的初始值必须是int型对象

引用与指针

相同点:

底层的实现方式相同, 都是按照指针的方式来实现的:

不同点:

有空指针,没有空引用;

引用定义时必须初始化, 指针可以不用, 正常情况下需初始化为NULL;

引用一旦定义就不能再改变, 指针可以;

sizeof求取的值不一样;

自 ++含义不同;

可以有多级指针, 但是没有多级引 用;

指针和引用的地址不同;

int**/int&&意义不同;

总结:

1、 引 用在定义时必须初始化, 指针没有要求。

2、 一旦一个引 用被初始化为指向一个对象, 就不能再指向其他对象, 而指针可以在任何时候指向任何一个同类型对象。

3、 没有NULL引 用, 但有NULL指针。

4、 在sizeof中含义不同: 引 用结果为引 用类型的大小,但指针始终是地址空间所占字节个数。

5、 引 用自 加改变变量的内 容, 指针自 加改变了 指针指向。

6、 有多级指针, 但是没有多级引用。

时间: 2024-10-03 22:41:48

引用的作用的相关文章

C++引用的作用和用法

引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 引用的声明方法:类型标识符&引用名=目标变量名: 例如: 1 2 int q; int &ra=a; 说明: &在此不是求地址运算,而是标识作用. 类型表示符是指目标变量的类型. 声明引用时,必须同时对其进行初始化. 引用声明完,相当于目标变量名有两个别名,即该目标原名称和应用名,切不能把该引用名作为其他变量名的别名. 声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一

Unity3D-ScrollRect 各参数的代码引用以及作用

版本Unity4.6: 以下为ScrollRect面板上各选项 对应 在代码里的属性: content(RectTransform): scrollRect的RectTransform组件,即滑动面板所有内容的父面板,该RectTransform的边界应该包含其所有需要显示的内容; horizontal(bool): 是否允许横向滑动 vertical(bool) : 是否允许纵向滑动 movementType(ScrollRect.MovementType) : ScrollRect运动的类型

C++ 指针 引用 变量引用

变量引用: 引用的作用就是给变量起个别名,假如有一个变量a,想给它起个别名b,         可以这么写:int a;//定义a是整型变量.int &b=a;//声明b是a的引用. 上面就是b是a的引用,即b是a的别名.在上面“&”是引用声明符,并不代表地址.a和b占同一个地址空间和内存单元.声明b是a的引用,可以理解为:使变量b具有变量a的地址. 引用作为函数参数: C++之所以增加引用机制,主要是把它作为函数参数,以扩充函数传递数据的功能. 函数参数传递的两种情况: 1.将变量名作为

c++的引用

/*#include"iostream"using namespace std;void any_function(int & p);//声明函数any_function//p为引用对象的别名int main(){ int a = 1; cout << "a is" << a << endl; any_function(a); //此时引用对象的地址传过去的,而不是副本//因为在c和c++中'&'是作为取地址符的,

PHP引用(&amp;)使用详解

PHP的引用(就是在变量或函数或对象或对象方法 等前面加上&符号) 在PHP 中引用的意思是:不同的名字访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容,在内存中存放的地址. 1.变量的引用 PHP 的引用允许你用两个变量来指向同一个内容. <? $a = "ABC"; $b = &$a; echo $a; //这里输出:ABC echo $b; //这里输出:ABC $b = "EFG"; echo $a

[Perl系列—] 2. Perl 中的引用用法

Perl 中的引用,为什么要使用引用? 对于熟悉C语言的开发者来说, 指针这个概念一定不陌生. Perl 的引用就是指针,可以指向变量.数组.哈希表甚至子程序. Perl5中的两种Perl引用类型为硬Perl引用和符号Perl引用.符号Perl引用含有变量的名字,它对运行时创建变量名并定位很有用,基本上,符号Perl引用就象文件名或UNIX系统中的软链接.而硬Perl引用则象文件系统中的硬链接. Perl4只允许符号Perl引用,给使用造成一些困难.例如,只允许通过名字对包的符号名哈希表(名为_

理解 php 中&amp; 引用

php中引用&的真正理解-变量引用.函数引用.对象引用 php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. 变量的引用        PHP 的引用允许你用两个变量来指向同一个内容 <?php $a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b=&q

php的引用

php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. 变量的引用        PHP 的引用允许你用两个变量来指向同一个内容 <?php $a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b="EFG"; echo $a;//这里$a的值变

关于“引用”的那些事儿

1.引用的概念 什么是引用,通俗地讲就是为某个目标变量起个别名(alias),对引用的操作和对目标变量的操作结果完全相同. 2.申明和使用引用”需要注意的问题 申明一个引用时,切记要对其进行初始化.引用声明完毕后,相当于目标变量有两个名称,即该目标变量的原名和引用名,不能再把该引用名作为其它变量的别名.申明一个引用,不是新定义一个变量,它只是目标变量的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统不会给引用分配存储单元.还有一点:不能建立数组的引用. 3.“引用”作为函数参数