C++ 指针*与引用&的区别

在C++中,指针*(pointer)与引用&(reference)的用法十分相似,但还是有一些区别的。我做了如下总结:

指针*引用&
写法int* p1 = #int& r1 = num;
有无实体指针是实体,有空间,有数据引用是别名,没有空间
初始化定义时可以不初始化定义时必须初始化int&r; //出错:引用必须初始化
为空可以为空,但为防止其为空,指针总是需要被测试它的合法性不能为空,引用必须与一块合法的存储单元关联,但这也意味着使用引用的代码效率比使用指针的要高,因为在使用引用之前不需要测试它的合法性
sizeof()函数sizeof(指针):计算的是指针本身的大小sizeof(引用):计算的是它引用的对象的大小
改变值改变指针的值,就是改变指针本身的值(改变了指针指向的地址)int* p1 = &num1; p1 = &num2; //指针p1的值被改变(从指向num1的地址变成了指向num2的地址)改变引用的值,即是在改变对引用的变量的值,而引用本身不能改变。int& r1 = num1; r1 = num2; //引用r1未被改变,改变的是num1的值(num1的值变为了num2)
多级可以存在多级指针int** p1; //合法。指向指针的指针 int*& p2; //合法。指向指针的引用不存在多级引用int&* p3; //非法。指向引用的指针是非法的 int&& p4; //非法。指向引用的引用是非法的
安全性没有引用安全:1. 指针需要空间,需要向系统申请内存和释放内存 2. 指针指向的地址可以随意改变较安全:1. 引用不关心内存申请和释放问题,不会存在内存泄漏 2. 引用的对象一旦确定就不可改变 3. 引用的生命周期就在函数体内,离开作用域就不存在了,比较安全
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页