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

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

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

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

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

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

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

相关推荐
数据小爬虫@2 小时前
深入解析:使用 Python 爬虫获取苏宁商品详情
开发语言·爬虫·python
健胃消食片片片片2 小时前
Python爬虫技术:高效数据收集与深度挖掘
开发语言·爬虫·python
王老师青少年编程3 小时前
gesp(C++五级)(14)洛谷:B4071:[GESP202412 五级] 武器强化
开发语言·c++·算法·gesp·csp·信奥赛
DogDaoDao3 小时前
leetcode 面试经典 150 题:有效的括号
c++·算法·leetcode·面试··stack·有效的括号
一只小bit4 小时前
C++之初识模版
开发语言·c++
王磊鑫4 小时前
C语言小项目——通讯录
c语言·开发语言
钢铁男儿4 小时前
C# 委托和事件(事件)
开发语言·c#
Ai 编码助手5 小时前
在 Go 语言中如何高效地处理集合
开发语言·后端·golang
小丁爱养花5 小时前
Spring MVC:HTTP 请求的参数传递2.0
java·后端·spring
喜-喜5 小时前
C# HTTP/HTTPS 请求测试小工具
开发语言·http·c#