栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

引用和指针的区别与联系

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

引用和指针的区别与联系

目录

初识引用      

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

引用和指针的区别


初识引用      

        引用是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.引用比指针安全,指针使用时经常需要判空。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034571.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号