【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. 静 态链接和动态链接有什么区别?

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

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

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

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

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

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

相关推荐
忒可君1 分钟前
C# winform 自制分页功能
android·开发语言·c#
Rust研习社5 分钟前
Rust 智能指针 Cell 与 RefCell 的内部可变性
开发语言·后端·rust
王老师青少年编程9 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:数列分段 Section I
c++·算法·编程·贪心·csp·信奥赛·线性扫描贪心
王老师青少年编程10 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:分糖果
c++·算法·贪心算法·csp·信奥赛·线性扫描贪心·分糖果
_日拱一卒12 分钟前
LeetCode:2两数相加
算法·leetcode·职场和发展
夕颜11144 分钟前
Skill 机器人 vs Hermes Agent:两种「AI 越用越聪明」的路径
后端
leaves falling1 小时前
C++模板进阶
开发语言·c++
无敌昊哥战神1 小时前
【保姆级题解】力扣17. 电话号码的字母组合 (回溯算法经典入门) | Python/C/C++多语言详解
c语言·c++·python·算法·leetcode
脱氧核糖核酸__1 小时前
LeetCode热题100——238.除了自身以外数组的乘积(题目+题解+答案)
数据结构·c++·算法·leetcode
ouliten1 小时前
C++笔记:std::invoke
c++·笔记