嵌入式软件工程师面试题——2025校招社招通用(C/C++)(三十八)

说明:

  • 面试群,群号: 228447240
  • 面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);
  • 文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但在这里博主希望每一个题目,大家都要经过认真思考,答案不重要,重要的是通过题目理解所考知识点,好应对题目更多的变化;
  • 博主与大家一起学习,一起刷题,共同进步;
  • 写文不易,麻烦给个三连!!!

前面1-15已经是C/C++,但是由于前面写的比较混乱,把八股文和题目混在了一起,所以从这一篇开始重新整理重新写,前面1-15也就可以选看了,希望多多支持!

1.字节对齐问题

答案:

什么是字节对齐:

需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐;常见就是求复合类型大小,比如结构体、联合体。

为什么需要字节对齐

需要字节对齐的根本原因在于CPU访问数据的效率问题。

2.C语言函数参数压栈顺序是怎样的

答案:

从右往左,并且内存中栈是由高向低扩展,所以先入栈的是右边并且地址是高位。

比如printf()函数,也都是先打印最右边。

3.在1G内存的计算机中能否malloc(1.2G)?为什么?

答案:

有可能,因为malloc是相进程申请虚拟内存,与物理地址空间没有直接关系。

4.malloc、calloc、realloc内存申请函数

答案:

申请堆内存

 void *malloc(size_t size); //申请size_t个字节内存
 void free(void *ptr); //释放内存,但是指针还是可以用
 void *calloc(size_t nmemb, size_t size); //申请nmemb快内存,每块size_t个字节
 void *realloc(void *ptr, size_t size);//申请内存,重新申请size_t字节内存
 void *reallocarray(void *ptr, size_t nmemb, size_t size); //重新分配内存块

说明:

1. malloc    内存未初始化,如果size为0,则malloc()返回NULL或一个稍后可以成功传递给free 的唯一指针值。

2. realloc    如果size_t>原来的s申请的空间大小,比如原来是100个字节,现在是150个字节,那么就有以下两种情况:

  • 原来100个字节后面还能放的下50个字节,那么就在原来地址上增加50个字节,返回的还是原来地址
  • 如果100个字节后面放不下50个字节,那么就会重新找个地址开辟150个字节空间,把原来的地址数据拷贝过来,释放掉原来地址空间,返回一个新的地址

3.calloc   申请内存空间后,会自动初始化内存空间为 0。

5.什么是指针?什么是指针的类型?

答案:

指针其实也是个变量,只不过这个变量里面存储的是内存地址。

举例说明:

int * a;指针类型为int *

char *c;指针类型为char *

6.指针本身所占据的内存区

答案:

占用内存的大小,在32为系统中无论是什么类型的指针都是4个字节。64位为8个字节。

7.指针和数组的区别?(类型、赋值、内存、字节大小、修改内容)

答案:

1.概念

数组:是同种类型的集合

指针:里面保存的地址的值

2.赋值:

同种类型指针之间可以直接赋值,数组只能一个个元素赋值

3.存储方式:

数组是连续的一段空间,指针的存储空间是不确定的

4.修改内容不同

比如:

char p[] =”hello”,我们可以执行p[0] = ‘s’操作原因是p是数组,可以使用下标的方式进行修改数组内容

Char * p = “hello” 执行p[0] = ‘s’是错误的,原因是p是指针,指向字符串常量,常量是不允许修改的

5.所占字节不同

指针永远是4个字节在32为系统中,而数组是不固定的,要看数组的类型和元素个数

8.什么是野指针?如何产生?如何避免?

答案:

野指针:是指指针指向的地址是不确定的;

原因:释放内存之后,指针没有及时置空;

避免:

  1. 初始化置NULL
  2. 申请内存后判空
  3. 指针释放后置NULL
  4. 使用智能指针

9.什么是智能指针

答案:

智能指针是个类,用来存储指针(指向动态分配对象的指针)。

C++程序中使用堆内存是非常频繁的,堆内存的申请和释放由程序员手动管理,这很容易造成堆内存的泄漏,使用智能指针能更好的管理堆内存。

10.智能指针的内存泄漏问题是如何解决的?

答案:

为了解决循环引用导致的内存泄漏,引入了weak_ptr。

11.数组名num /&num的区别

答案:

对于一维数组来说

num+1是偏移到下个元素,&num+1是偏移整个数组

对于二维数组来说

num+1是偏移一个一维数组,&num+1是整个数组

12.有了指针为什么还需要引用

答案:

直接的原因是为了支持运算符重载。

用指针的使用经常犯得错

1. 操作空指针,

2. 操作野指针,

3. 不知不觉改变了指针的值,而后还以为该指针正常。如果我们要正确的使用指针,我们不得不人为地保证这三个条件。而引用的提出就解决了这个问题。

引用区别于指针的特性是 :

1. 不存在空引用(保证不操作空指针);

2. 必须初始化(保证不是野指针);

3. 一个引用永远指向他初始化的那个对象(保证指针值不变)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/347326.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【正点原子STM32】STM32基础知识(F1F4F7H7 STM32系统框架、寻址范围、存储器映射的存储器功能划分、寄存器映射)

一、STM32系统框架 1.1、Cortex M内核 & 芯片1.2、F1系统架构1.3、F4系统架构1.4、F7系统架构1.5、H7系统架构 二、STM32的寻址范围? 三、存储器映射 存储器功能划分(F1为例)STM32F1存储器映射图 四、寄存器映射 寄存器基础知识STM3…

景联文科技大模型数据集更新!教育题库新增高质量数学题、逻辑推理题及英文题

苏格拉底曾以“点燃火焰”的理念来诠释教育。随着大语言模型在教育中的不断应用,教育与AI的深度融合,让我们看到了“点燃火焰”的理念的更多可能性。 大语言模型可以通过与学生的互动,为他们提供个性化的学习体验,更好地满足学习需…

“创新地引入了”和“创新地提出了”这两个词语有什么区别?

问题描述:“创新地引入了”和“创新地提出了”这两个词语有什么区别? 问题解答: "创新地引入了"更侧重于将他人的方法、概念或技术引入到一个新的领域、环境或情境中。这可能表示说话者正在借鉴、采用别人的创新性方法&#xff0c…

Spring Security 之 内存认证

Spring Security的InMemoryUserDetailsManager实现了UserDetailsService,以提供对存储在内存中的基于用户名/密码的身份验证的支持。InMemoryUserDetailsManager通过实现UserDetailsManager接口提供了对UserDetails的管理。当Spring Security配置为接受用户名和密码进行身份验…

(含morris遍历)代码随想录 Leetcode144/94/145 二叉树的前/中/后序遍历

题目&#xff1a; 前&#xff1a; 中&#xff1a; 后&#xff1a; 代码&#xff08;首刷自解 2024年1月24日&#xff09;&#xff1a; //前序遍历&#xff0c;递归 class Solution { public:void funcOfRecursion(TreeNode* cur, vector<int>& vec) {if (cur null…

【软考问题】-- 2 - 知识精讲 - 项目立项管理

一、基本问题 1&#xff1a;项目投资前时期的四个阶段是什么&#xff1f; a.项目建议与立项申请 (1)定义&#xff1a;项目建设单位向上级主管部门提交项目申请时所必须的文件。(2)特点&#xff1a;项目发展周期的初始阶段、可行性研究的依据。(3)注意&#xff1a;又称项目建议书…

【QT+QGIS跨平台编译】之八:【zstd+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、zstd介绍二、文件下载三、文件分析四、pro文件五、编译实践一、zstd介绍 ZSTD(Zstandard的缩写),是一种快速压缩算法,提供了高压缩比功能。ZSTD还为小数据提供了一种特殊的模式,称为字典压缩。ZSTD库使用BSD许可证作为开放源码软件提供的。它的格式是稳定的,…

C# 实现 Word 加盖骑缝章效果

目录 实现效果 范例运行环境 Office DCOM 配置 设计实现 创建stamp图章类 电子章图片的计算与定位 旋转图片方法 总结 实现效果 在OA的自动化处理系统中&#xff0c;通过审批的最终节点&#xff0c;可能会对WORD文件加盖电子章&#xff0c;比如定位带有指定文字的Ra…

【C++入门到精通】智能指针 shared_ptr循环引用 | weak_ptr 简介及C++模拟实现 [ C++入门 ]

阅读导航 引言一、std::shared_ptr的循环引用1. 概念2. 示例分析 二、std::weak_ptr1. 简介2. weak_ptr模板类提供的成员方法3. 使用示例&#xff08;1&#xff09;weak_ptr指针的创建&#xff08;2&#xff09;完整示例&#xff08;解决上面循环引用问题&#xff09; 4. C模拟…

Pandas ------ 如果读取带有 multi-index 和 Multi-column 表头的数据

pandas ------ 如果读取带有 multi-index 和 Multi-column 表头的数据 引言正文 引言 之前我们在 《Pandas ------ 向 Excel 文件中写入含有 multi-index 和 Multi-column 表头的数据》 一文中介绍了如何向 Excel 文件中写入含有 multi-index 和 Multi-column 表头的数据。但是…

电脑出现msvcp140.dll丢失错误弹窗怎么办,msvcp140.dll丢失的解决方法

在使用电脑的过程中出现关于“msvcp140.dll丢失”的错误弹窗&#xff0c;电脑出现这样的弹窗是通常或导致电脑中的一些程序不能正常运行&#xff0c;那么有什么办法可以解决这样的错误呢&#xff1f;今天就将和大家说说关于电脑出现msvcp140.dll丢失的解决办法。 一.使用dll修复…

JVM问题排查手册

三万字长文&#xff1a;JVM内存问题排查Cookbook 一、Heap快照 # jmap命令保存整个Java堆&#xff08;在你dump的时间不是事故发生点的时候尤其推荐&#xff09; jmap -dump:formatb,fileheap.bin <pid> # jmap命令只保存Java堆中的存活对象, 包含live选项&#xff0c;…

自动 CAPTCHA 解决方案,最佳 CAPTCHA 解决方案扩展 2024?

自动 CAPTCHA 解决方案&#xff0c;最佳 CAPTCHA 解决方案扩展 2024&#xff1f; 在迅速发展的数字领域中&#xff0c;高效的 CAPTCHA&#xff08;Completely Automated Public Turing tests to tell Computers and Humans Apart&#xff0c;完全自动化的全球公共图灵测试&…

正则表达式第三四个作用:替换、切割

目录 方法二 replaceAll&#xff1a; 方法三&#xff1a;spilt&#xff1a; 方法一之前已经见过了&#xff1a; 方法二 replaceAll&#xff1a; 形参中&#xff1a; 参数regex表示一个正则表达式。可以将当前字符串中匹配regex正则表达式的字符串替换为newStr。 代码演示 S…

什么是线程死锁

死锁是指两个或两个以上的进程&#xff08;线程&#xff09;在执行过程中&#xff0c;由于竞争资 源或者由于彼此通信而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推 进下去。此时称系统处于死锁状态或系统产生了死锁&#xff0c;这些永远在互相…

SIP PRACK method

PRACK 在rfc 3262中定义。 在RFC3261 中,provisonal response (1xx response)表示所联系的服务器正在执行一些进一步的操作,并且尚未有明确的响应。如果服务器预计需要超过 200 毫秒才能获得最终响应,则会发送 1xx 响应。临时(1xx)响应可以包含消息正文,包括会话描述。 p…

MySQL--删除数据表(6)

MySQL中删除数据表是非常容易操作的&#xff0c;但是你在进行删除表操作时要非常小心&#xff0c;因为执行删除命令后所有数据都会消失。 语法 以下为删除 MySQL 数据表的通用语法&#xff1a; DROP TABLE table_name ; -- 直接删除表&#xff0c;不检查是否存在 或 DROP…

语音方向精典论文品读_HuBERT

英文名称: HuBERT: Self-Supervised Speech Representation Learning by Masked Prediction of Hidden Units 中文名称: HuBERT&#xff1a;通过隐藏单元的屏蔽预测进行自监督语音表示学习 链接: http://arxiv.org/abs/2106.07447v1 代码: https:// github.com/pytorch/fairseq…

DevEco Studio打印console日志

Button("MenuSimple").margin(10).onClick(() > {console.info(打印日志信息);console.info("普通的信息");console.debug("DEBUG级别的信息");console.warn("警告的信息");console.error("错误的信息");router.pushUrl(…

6.Toast(Android)

愿你出走半生,归来仍是少年&#xff01; 环境&#xff1a;.NET 7、MAUI 在Maui开发中使用的Toast太丑了&#xff0c;在android项目中使用时不够看。通过Maui的安卓绑定库可实现将android中已有的包导入到C#项目中使用&#xff0c;借助这个方法就可以使用以前在android原生开发…