当前位置: 首页 > news >正文

C/C++面试常见问题——指针和引用的区别

首先想要理解指针和引用的区别,我们要明确什么是指针,什么是引用

一,指针和引用的基本概念及特性

指针是一个特殊变量,其中存储着所指向变量的地址

指针主要有以下特性:

1. 在使用时需要*解引用

2. sizeof(指针)的大小是固定的,32位系统下是4字节,64位系统下是8字节

3. 指针+1,指的是指针向后偏移,偏移量为指向变量的类型的大小

引用不是新定义一个变量,而是给变量起别名,引用和被引用变量共用一处空间,不会额外开辟空间

引用特性如下:

1. 引用在定义时必须初始化

2. 一个变量可以有多个引用,就如同一个人可以有多个别名

3. 引用定义后,就无法在引用其他变量

4. 常引用,常引用指的就是在引用常变量时需要用const修饰,这是因为权限只能缩小不能放大,被引用变量都无法修改值,那么引用自然也不能修改

int main()
{//引用int a = 10;int& b=a;//常引用const int c = 10;const int& d = c;return 0;
}

而常引用这里需要注意的一点时不同类型的常引用

 如上面情况,为什么int类型无法引用double类型变量,这是因为当用int类型引用double类型变量时,会有一个隐式类型转换,编译器会重新开辟一个临时空间用于存放double的整形数据,而临时变量具有常性,因此不同类型引用需要用const修饰

二,引用和指针的区别

在搞明白引用和指针各自的概念和特性之后,区别就显而易见了

引用和指针的区别如下:

1. 引用是取别名,和被引用对象共用一块空间。而指针则是一个特殊变量,存储指向变量的地址

2. 引用在定义时必须初始化,而指针则没有要求,因此指针有NULL,引用则没有

3. 指针sizeof计算的大小是固定的(32位4字节,64位8字节),而引用sizeof计算的大小则是被应用变量的大小

4.引用在使用时按照正常变量使用即可,而指针还需要*解引用访问目标值

5.引用在定义初始化后,就无法引用其他值;指针则可以改变指向的地址

6.引用+1,就是引用的实体值+1;指针+1则是,指针偏移一个指向类型数据大小的偏移量

7.指针有多级指针,用起来比较复杂;而引用,没有多级引用,因此在C++中使用引用更加安全

但是这里需要注意一个大前提,在语法上讲,引用是别名,没有自己的空间,而在底层上,引用是有自己的空间的,而且其调用方式和指针是一样的,因此引用也可以看做是对指针的一层封装,让我们使用时更加简单安全。

以上内容如有错误,希望大佬多多指点,感谢感谢

http://www.lryc.cn/news/198395.html

相关文章:

  • 探索DeFi世界,MixGPT引领智能金融新时代
  • 留学教育咨询机构如何通过软文强势突围
  • 苹果平板可以用别的电容笔吗?电容笔和Apple pencil区别
  • 【Matlab笔记_16】yyyy-MM-dd HH:mm:ss的datetime格式拆分为yyyy-MM-dd日期部分和HH:mm:ss时间部分
  • Android12之DRM架构(一)
  • 檀香香料经营商城小程序的作用是什么
  • RPA在票据处理中的应用
  • Jmeter接口测试 —— jmeter对图片验证码的处理
  • minikube创建一个pod并暴露端口(使用docker驱动安装)
  • 2023国考证件照要求什么底色?证件照换背景底色的方法
  • 【SA8295P 源码分析 (一)】87 - SA8295P HQNX + Android 编译环境搭建指导
  • 网络基本结构及数据传输方式
  • 从实体经济和数字经济融合展开,思考商业模式的变化
  • Python 框架学习 Django篇 (四) 数据库增删改查(CURD)
  • 关于错误码
  • Linux | gcc/g++的使用
  • 了解容器运行时安全:保护你的容器应用
  • 大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求
  • Element UI定义方法校验邮箱格式
  • DigiCert代码签名证书
  • HTML5+CSS3小实例:网页底部间隔波浪动画特效
  • 前端 js 之 代码执行的一个过程 02
  • 【经验分享】如何构建openGauss开发编译提交一体化环境
  • 儿童疫苗接种:安全与注意事项
  • Go 代码块与作用域,变量遮蔽问题详解
  • 可观测性-Metrics-WebClient异步Http远程Call
  • Android之播放本地视频和Url视频方法
  • 设计模式:工厂方法模式(C#、JAVA、JavaScript、C++、Python、Go、PHP):
  • C++基础——指针
  • PLC 学习day02 硬件输入/输入的知识