C++面试题(18)| 指针和引用的区别

108 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

image.png

(欢迎大家关注我的微信公众号——控制工程研习,上面会分享很多我学习过程中总结的笔记。)

题目来自阿里C++面试题

主要区别

指针引用
指针是一个变量,存储的是一个地址,指向内存的一个存储单元。引用是原变量的一个别名,跟原来的变量实质上是同一个东西。
指针可以有多级int **p; // valid引用只能是一级int &&a; // invalid
指针可以在定义的时候不初始化引用必须在定义的时候初始化
指针可以指向NULL引用不可以为NULL
指针初始化之后可以再改变引用在初始化后就不可以再改变
自增运算表示指向下一个内存引用自增运算相当于被引用的变量++
作为函数参数时需要检查是否为空void fun_p(int *p){      if (p == NULL)     {           //       }}作为函数参数时不需要检查是否为空void fun_a(int &a){     // }
sizeof(指针)返回Type*类型的大小sizeof(引用)返回Type类型的大小

重点的区别:

    从表面上看,引用和指针都非常相似,因为两者都用于让一个变量提供对另一个变量的访问。由于两者都提供了许多相同的功能,因此通常不清楚这些机制之间的区别。

指针:指针是保存另一个变量的内存地址的变量。指针需要使用 * 运算符取消引用,才能访问它指向的内存位置。

int val = 5;
//code//
int *p = &val;

引用:引用变量是别名,即已存在变量的另一个名称。引用(如指针)也是通过存储对象的地址来实现的。可以将引用视为具有自动间接寻址的常量指针(不要与指向常量值的指针混淆!),即编译器将为您应用 * 运算符

int val = 52;
int &ref = val;