c++引用

一 什么是引用?

    引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;

二 引用说明

(1)&在此不是求地址运算,而是起标识作用。
(2)类型标识符是指目标变量的类型。
(3)声明引用时,必须同时对其进行初始化。
(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。(有点类似与linux中的硬链接)

    char a=2,char &aa=a;
    a为目标原名称,aa为目标引用名。给aa赋值:aa=1; 等价于 a=1;
(5)对引用求地址,就是对目标变量求地址。&aa与&a相等。即我们常说引用名是目标变量名的一个别名。别名一词好像是说引用不占据任何内存空间。但是编译器在一般将其实现为const指针,即指向位置不可变的指针。即引用实际上与一般指针同样占用内存。
(6)不能建立引用的数组。因为数组是一个由若干个元素所组成的集合,所以无法建立一个由引用组成的集合。但是可以建立数组的引用.
三 传递可变参数
    传统的c中,函数在调用时参数是通过值来传递的,这就是说函数的参数不具备返回值的能力。
所以在传统的c中,如果需要函数的参数具有返回值的能力,往往是通过指针来实现的。比如,实现
两整数变量值交换的c程序如下:
1
2
3
4
5
6
7
void swapint(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
使用引用机制后,以上程序的c++版本为:
1
2
3
4
5
6
7
void  swapint( int  &a, int  &b)
{
int  temp;
temp=a;
a=b;
b=temp;
}
调用该函数的c++方法为:swapint(x,y); c++自动把x,y的地址作为参数传递给swapint函数。

四 函数返回引用:

 (1) c++返回引用时没有对返回值进行复制,而是返回对象的本身。

int& Test::func(int &a)
{
        cout<<"this is a Test program"<<endl;
        return a;
}

    以上示例返回的是引用,对a来说,函数执行结束之后并没有将a进行复制,而是直接返回传进来的a本身。

也正是因为这样,返回引用可以提高效率,因为在函数调用结束时不需要将返回值复制。

    (2 )当一个函数需要返回引用时,必须在其参数列表中包含以引用或者指针形式存在的并且需要返回的参数,而不能直接返回局部对象。

    错误示例:

Test& Test::func(int &x)
{
        cout<<"this is a Test program"<<endl;
        Test tt;
        tt.a=9;
        return tt;
}

    在linux环境下执行结果为:段错误。

    正确示例:

Test& Test::func(Test &tt)
{
        cout<<"this is a Test program"<<endl;
        tt.a = 123456;
        return tt;
}

    在linux环境下执行结果:

        this is a test program

        123456

我的理解,引用的表面现象就是给变量起了一个别名,这个别名和它的真名都是指向同一个变量,操作任何一个效果都一样,都是对这个变量进行操作,本质上就是把变量的指针复制了一份,然后用一个新的变量(别名)存储起来。

参考链接:https://baike.baidu.com/item/C%2B%2B%E5%BC%95%E7%94%A8

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值