C++学习二:C++的非面向对象的知识点-----引用

我相信很多人回答c++与c语言的区别就是c++是面相对象的编程语言而c语言是面相过程的编程语言.

其实c++对于c语言扩展的还有很多非面向对象性质的部分,这里我将一一介绍分析这些知识点.

1.引用

     什么是引用

    某种意义上来说,引用就是指针的平替,相当于起了小名,可以说几乎所有的面向对象的编程语言都会使用引用.

    指针和引用的区别

1.指针是一个变量,只不过指针变量是一个存储地址的变量,是一个实体,创建会开辟空间,而引用相当于起小名,举例就是张三的小名是小三,张三和小三是同一个人,你对小三处理实际上就是处理张三,所以引用的创建不会开辟新的空间.

int a=1;int *p=&a;

int a=1;int &b=a;

例如上面的代码,p是一个指针变量,也可以说是地址变量,它存储了a的地址,也就是指向了a,可以通过p找到a.而b是a的引用,也就是a的小名,实质上a和b都是同一个变量,所以b不开辟空间,b的存储单元地址等于a的存储单元地址.

2.指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;

指针是一个存储地址的变量,变量就像一个储藏柜,储藏柜可以放东西,也可以不放东西,而指针就是一个专门存储地址的储物柜,不放东西也就是NULL;

引用就是取小名,你取小名的前提是有大名,如果你连取小名的对象都没有,怎么取小名,所以引用的值不能为NULL,而且在定义时,必须初始化赋值.

3.指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了,从一而终。

指针变量是个储藏柜,也就是我可以放不同的东西.而引用是小名,你你可以有很多个小名,但是小名的对象不能变动.

4.sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小;

我们知道sizeof求的是对象的所占字节大小,如果对象是引用,引用=引用的对象,所以sizeof引用就是求引用对象的大小,而指针是一个指针变量,存储的是地址,sizeof指针,就是地址的大小.

5.指针和引用的自增(++)运算意义不一样;

指针++是也就是地址单位+1,我们知道32位系统的地址单位是4字节,64位系统的地址单位是8字节,因此指针单位+1,就是地址数据+4字节/8字节

引用++实质就是引用的对象单位+1,若引用对象是int类型,就是整形数据+1;

经过与指针的对比,我们可以说已经对引用有了一定的了解.

引用参数

// C语言 在C++不推荐这种写法
void swap1(int *a,int *b)
{
    *a = *a ^ *b;
    *b = *a ^ *b;
    *a = *a ^ *b;
}

// C++ 编程方式,符合需求
void swap2(int &a,int &b)
{
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
}

上面的第一个函数swap1我相信学过c语言的都写过这段代码,这是一个简单的交换函数,因为有函数作用域的限定,会在swap1中产生新的变量a,b所以我们想要交换两个变量的值,在c语言中必须使用地址传参才能实现.

而在我们c++中,可以直接使用引用传参,相当于对变量直接操作.产生的引用a和引用b不会产生新的变量,即不会开辟新的空间,会提高代码的执行效率.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值