引用和指针的区别与联系

发布于:2023-02-02 ⋅ 阅读:(413) ⋅ 点赞:(0)

目录

初识引用      

引用和指针的汇编代码对比

引用和指针的区别


初识引用      

        引用是C++对C语言的一个扩充,来看一下引用的概念:引用不是新定义一个变量,而是给现在已经有的变量取个新名字(或者说 外号)。编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。(这句话只是为了方便理解,其实引用是有空间的)

        来举个例子,方便理解。姓名:李逵,外号:黑旋风。李逵就是已经有的变量,黑旋风则是他的一个外号。

        引用的使用方法:类型 & 引用变量名 = 引用实体;eg: int & ra = a;

引用和指针的汇编代码对比

        通过以下代码和它的汇编代码来观察引用和指针的区别和联系。

#include "iostream"
using namespace std;
int main() {
    int a = 1;

    int& ra = a;
    ra = 20;

    int* pa = &a;
    *pa = 20;
}

         下图是对上述代码的汇编指令的展示,图中的文字则是对汇编代码中每条指令的叙述:

         由上图的汇编指令可以看出,引用和指针在底层实现上,竟然是完全一致的!区别无非是变量名的不同,这也解释了文章开头引用概念括号内的内容。因为底层实现完全一样,指针有空间,引用自然也有,概念也只是为了方便理解罢了。

引用和指针的区别

        1.引用在定义时必须初始化,指针不需要。

        2.引用在初始化时引用一个实体后,就不能在引用其他实体,而指针可以任意指向同类型的实体。

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

        4.在sizeof中的含义不同,sizeof(引用)的大小为引用类型的大小,sizeof(指针)的大小在32位平台下是4字节。(eg: int a; int & ra = a; sizeof(ra) == sizeof(int))

        5.引用自加即引用的实体加1,指针自增为指针指向的地址向后偏移一个指针类型的大小。

        6.有多级指针,无多级引用。(但C++11中有新特性 右值引用)

        7.访问实体方式不同,指针需要显式解引用,引用编译器自己处理。

        8.引用比指针安全,指针使用时经常需要判空。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到