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

✍个人博客:Pandaconda-CSDN博客

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

📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~

❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

13. 指针和 引用的区别

从普通角度回答:

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

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

从反汇编分析:

指针:

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

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

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

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

引用:

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

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

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

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

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

cpp 复制代码
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. 静 态链接和动态链接有什么区别?

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

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

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

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

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

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

相关推荐
大阳1235 分钟前
线程(基本概念和相关命令)
开发语言·数据结构·经验分享·算法·线程·学习经验
杨DaB12 分钟前
【SpringBoot】Swagger 接口工具
java·spring boot·后端·restful·swagger
YA33313 分钟前
java基础(九)sql基础及索引
java·开发语言·sql
恋喵大鲤鱼19 分钟前
Golang 后台技术面试套题 1
面试·golang
why技术24 分钟前
也是震惊到我了!家里有密码锁的注意了,这真不是 BUG,是 feature。
后端·面试
桦说编程32 分钟前
方法一定要有返回值 \ o /
java·后端·函数式编程
奇树谦1 小时前
QT|windwos桌面端应用程序开发,当连接多个显示器的时候,如何获取屏幕编号?
开发语言·qt
David爱编程1 小时前
Java 创建线程的4种姿势,哪种才是企业级项目的最佳实践?
java·后端
weixin_307779131 小时前
VS Code配置MinGW64编译GNU 科学库 (GSL)
开发语言·c++·vscode·算法
froginwe112 小时前
HTML 框架:构建网页布局的基石
开发语言