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

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

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

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

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

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

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

相关推荐
zaim144 分钟前
计算机的错误计算(一百一十四)
java·c++·python·rust·go·c·多项式
学习使我变快乐1 小时前
C++:const成员
开发语言·c++
2401_857439692 小时前
Spring Boot新闻推荐系统:用户体验优化
spring boot·后端·ux
500了2 小时前
Kotlin基本知识
android·开发语言·kotlin
进击的女IT3 小时前
SpringBoot上传图片实现本地存储以及实现直接上传阿里云OSS
java·spring boot·后端
一律清风4 小时前
QT-文件创建时间修改器
c++·qt
一 乐4 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
不知所云,4 小时前
qt cmake自定义资源目录,手动加载资源(图片, qss文件)
开发语言·qt
风清扬_jd4 小时前
Chromium 如何定义一个chrome.settingsPrivate接口给前端调用c++
前端·c++·chrome
安冬的码畜日常4 小时前
【玩转 JS 函数式编程_006】2.2 小试牛刀:用函数式编程(FP)实现事件只触发一次
开发语言·前端·javascript·函数式编程·tdd·fp·jasmine