我相信很多人回答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不会产生新的变量,即不会开辟新的空间,会提高代码的执行效率.