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

【C++ 面试 - 基础题】每日 3 题(五)

✍个人博客:Pandaconda-CSDN博客

📣专栏地址:http://t.csdnimg.cn/fYaBd

📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

13. 指针和引用的区别

从普通角度回答:

指针可以有多级指针,而引用不能有多级引用。

引用更安全些,因为能够确保引用指的是分配的一块内存,而指针可能会出现野指针的情况。

从反汇编分析:

指针:

  • 指针是一个变量,存储对象的内存地址。

  • 指针的值可以被修改,可以指向不同的对象或者被置为空(nullptr)。

  • 通过指针访问对象时,编译器会生成相应的指针操作指令,如加载指针的值、存储指针的值、指针偏移等。

  • 需要使用解引用(*)操作符来获取指针指向的对象,该操作会引起额外的内存访问。

引用:

  • 引用是一个别名,引用一个已经存在的对象。

  • 引用在声明时必须初始化,并且不能被重新赋值为引用其他对象。

  • 使用引用访问对象时,编译器会将引用直接转换为对对象的访问,而不会生成额外的指令。

  • 引用的访问方式类似于直接访问对象,无需使用解引用操作符。

从反汇编的角度来看,指针使用起来比引用更灵活,但也更容易出错。指针需要额外的指令来读取和修改指针的值,而引用可以直接通过对象访问来实现。因此,在性能要求高、需要灵活操作对象的情况下,指针可能更适合;而在简单的对象访问和避免错误的情况下,引用则更为方便和安全。

int a = 10;
int* p = &a; //lea eax,[a]   mov dword ptr[ebp-8],eax
int& b = a; //lea eax,[a]   mov dword ptr[ebp-0Ch],eax
*p = 20; //mov eax,dword ptr[ebp-8]   mov dword ptr[eax],14H
b = 20; //mov eax,dword ptr[ebp-0Ch]   mov dword ptr[eax],14H

14. 句柄和指针的区别和联系是什么?

句柄和指针其实是两个截然不同的概念。

Windows 系统用句柄标记系统资源,隐藏系统的信息。你只要知道有这个东西,然后去调用就行了,它是个 32 bit 的 uint。

指针则标记某个物理内存地址,两者是不同的概念。

15. 静态链接和动态链接有什么区别?

静态链接是在编译链接时直接将需要的执行代码拷贝到调用处;

  • 优点在于程序在发布时不需要依赖库,可以独立执行;

  • 缺点在于程序的体积会相对较大,而且如果静态库更新之后,所有可执行文件需要重新链接。

动态链接是在编译时不直接拷贝执行代码,而是通过记录一系列符号和参数,在程序运行或加载时将这些信息传递给操作系统,操作系统负责将需要的动态库加载到内存中,然后程序在运行到指定代码时,在共享执行内存中寻找已经加载的动态库可执行代码,实现运行时链接;

  • 优点在于多个程序可以共享同一个动态库,节省资源;

  • 缺点在于由于运行时加载,可能影响程序的前期执行性能。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 在vue中实现函数防抖
  • 2-17、18 HC06蓝牙模块(meArm机械臂)
  • TCP 通信全流程分析:从连接建立到数据传输的深度探索
  • Spring Boot实用小技巧 - - 第523篇
  • openEuler软件管理
  • MyBatis 源码学习 | Day 2 | MyBatis 初始化
  • 【前端】记录各种控制台警告/bug
  • yolo中的iou是什么意思
  • 力扣高频SQL 50题(基础版)第四十题之1164. 指定日期的产品价格
  • mysql事务与索引
  • 浅谈 Spring AOP框架 (2)——Spring统一功能处理
  • 24.8.5数据结构|栈
  • vscode ssh-remote 疑似内存泄漏问题
  • 两轮电动车行业竞争激烈,九号公司如何破局
  • uniapp点击图片预览,关闭预览图片后自动触发onshow生命周期,怎么解决?
  • AHK 中 = 和 == 等比较运算符的用法
  • Android交互
  • CentOS7简单部署NFS
  • CSS相对定位
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Electron入门介绍
  • ES6语法详解(一)
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • PHP 小技巧
  • PV统计优化设计
  • 搞机器学习要哪些技能
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 排序(1):冒泡排序
  • 跳前端坑前,先看看这个!!
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 一些css基础学习笔记
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • C# - 为值类型重定义相等性
  • Linux权限管理(week1_day5)--技术流ken
  • Python 之网络式编程
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 数据可视化之下发图实践
  • #git 撤消对文件的更改
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (04)odoo视图操作
  • (4) PIVOT 和 UPIVOT 的使用
  • (LeetCode C++)盛最多水的容器
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (一)SvelteKit教程:hello world
  • (转)平衡树
  • (自适应手机端)行业协会机构网站模板
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net core 控制台应用程序读取配置文件app.config
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET未来路在何方?
  • .NET性能优化(文摘)
  • @Controller和@RestController的区别?