嵌入式软件工程师面试题——2025校招社招通用(六)

说明:

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

1.指针自增自减有什么不同?

分析:
指针的自增和自减是将指针的所指地址加1或者减1的操作,也有前置和后置的两种使用形式。
下面先来看一个指针自增的示例代码。

#include <iostream>
using namespace std;int main()
{char str[] = "chinses people";char *p = &str[0];char *tem = &str[1];printf("p=%p\n",p);printf("*p=%c\n",*p);++*p++;printf("p=%p\n",p);printf("*p=%c\n",*p);puts(str);return 0;
}

答案: 变量的自增自减是修改变量的值,指针的自增自减是修改指针的指向地址

2.什么是左值和右值

分析:

  • 左值可以出现在赋值语句的左边或右边,也就是说左值可以当右值使用。右值只能出 现在赋值的右边,不能出现在赋值语句的左边。左值表示程序中必须有一个特定的名字引用到这个值。右值表示程序中没有一个特定的名字引用到这个值。
  • 变量是左值,因此可以出现在赋值语句的左边。数字字面值是右值,因此不能被赋值。 实际上,左值是一个存储地址,也就是一块内存存储数据所要操作的地址。而右值是一个 具体的数据或者数值,也就是该内存存储的数据内容。只有左值和右值都是单一变量的时候二者才可以相互交换位置,因为变量具有固定的内存地址。

答案: 变量是左值,可以出现在赋值语句的左边。数字字面值是右值,不能被赋值。

3.变量默认初始化有什么规则

解析:

  • 当定义没有初始化表达式的变量时,系统有时候会自动帮编程者初始化变量。这时,系统会提供什么样的值取决于变量的类型和变量定义的位置。
  • 内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始 化为0,在函数体里定义的内置类型变量不进行自动初始化。除了用作赋值操作符的左操作数,未初始化变量用作任何其他用途都是没有定义的。
  • 类自身定义了该类型的对象可以怎样初始化。类通过定义一个或多个构造函数来控制 类对象的初始化。如果定义某个类的变量时没有提供初始化,这个类也可以定义初始化时的操作。它是通过定义一个特殊的构造函数即默认构造函数来实现的。

答案:
系统有时候会自动帮编程者初始化未初始化的变量。使用未初始化的变量是常见的程 序错误,但通常也是很难以发现的错误,有时候会导致编程者在程序运行时发生的问题原 因上出现判断错误。所以建议每个内置类型的对象都要初始化。虽然这样并不是完全必需的,但是会让程序容易和安全。

4.变量有哪几种存储类型

答案:

  • 自动类型变量 (auto)
    自动类型只能是局部类型的变量,属于动态存储类型。
  • 静态类型变量 (static)
    static, 即在程序运行的过程中静态变量始终是占用一个存储空间。静态变量只能在他 的作用范围内使用,使用局部静态变量是为了在下次调用该函数时,能使用上次调用后得到的该变量的值。
  • 寄存器类型变量 (register)
    属于动态存储类型,编译器不为寄存器类型的变量分配内存空间,而是直接使用CPU 的寄存器。以便提高对这类变量的存取速度。主要用于控制循环次数等不需要长期保存值得变量。
  • 外部类型变量 (extern)
    外部类型变量必须是全局变量,在C++ 中,有两种情况需要使用外部类型变量。 一种 是在同一源程序文件中,当在全局的定义之前使用该变量时,在使用前要对该变量进行外部类型变量声明。另一种是当程序有多个文件组成时,若在一个源文件中要引用在另一个源文件中定义的全局变量,则在引用前必须对所引用的变量进行外部声明。
    如果在某文件中定义的全局变量不想被其他文件所调用,则必须将该变量声明为静态全局变量,也就是说,静态全局变量只能供所在的文件使用。

5.C 与 C++ 有什么区别

答案:

  • 面向对象编程:C++引入了面向对象编程(OOP)的概念,允许使用类、继承、封装、多态等OOP特性。C语言则是一种结构化、过程式的编程语言,没有直接支持OOP。
  • 强类型语言:C++是一种强类型语言,对于变量的类型要求非常严格。在C++中,需要进行显式的类型转换,以确保类型安全。而C语言对类型转换较为宽松,可以进行隐式的类型转换。
  • 新增关键字和类型:C++引入了一些新的关键字和类型,如class、virtual、template等。此外,C++还引入了bool类型、引用(reference)类型、命名空间等概念,以增强语言的功能和表达能力。
  • 参数规定:C++支持默认参数和函数重载,这意味着函数可以有默认值的参数,并且可以在同一作用域内定义多个同名的函数,只要它们的参数列表不同。而C语言不支持这些特性,函数的参数列表必须完全匹配。
  • 参数格式和变量作用域:C和C++对于函数参数的格式要求略有不同。C语言的函数参数列表要求在函数声明中列出具体的参数名,而C++则只需要指定参数类型即可。此外,C和C++对于变量的作用域规则也有一些差异。
  • 引用(reference)的使用:C++引入了引用(reference)类型,它可以用来创建一个变量的别名。通过引用,可以实现对变量的原地修改,而不需要通过指针进行操作。C语言没有引用这个概念,只能通过指针来实现类似的功能。

6.文件输入输出有哪几种方式

答案:
fstream 头文件定义了3种支持文件I/O的类型,如下所示

  • ifstream: 由 istream 派生而来,提供读文件的功能。
  • ofstream: 由 ostream 派生而来,提供写文件的功能。
  • fstream: 由 iostream派生而来,提供读写同一个文件的功能。
    这些类型都由相应的 iostream 类型派生而来,这个事实意味着编程者已经知道使用 fstream类型需要了解的大部分内容了。特别是,可使用I/O 操作符(<<和>>)在文件 上实现格式化的I/O, 而且在前面章节介绍的条件状态也同样适用于fstream 对象。 fstream 类型除了继承下来的行为外,还定义了两个自己的新操作 open 和 close, 以及形参为要打 开的文件名的构造函数。fstream、ifstream 或ofstream 对象可调用这些操作,而其他的I/O 类型则不能调用。
    一个文件写入的示例代码如下:
#include <fstream>
using namespace std;int a(void)
{return 110;
}int main(void)
{ofstream oftest;char filename[16] = "c:\\a.txt";oftest.open(filename, ostream::app);oftest.close();oftest.clear();return 0;
}

7.宏定义与操作符的区别

分析:

  • 宏定义是C 语言开始提供的3种预处理功能的其中一种。这3种预处理分别是:宏定义、文件包含和条件编译。
  • 宏定义的语法格式为:#define<标识符><字符串>,其中的标识符就是所谓的符号常量,也称为“宏名”。预处理(预编译)工作也叫做宏展开,即将宏名替换为字符串。
  • 单的宏定义将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串 来代替。预处理命令后通常不加分号。这并不是说所有的预处理命令后都不能有分号出现。 由于宏定义只是用宏名对一个字符串进行简单的替换,因此如果在宏定义命令后加了分号,将会连同分号一起进行置换。
  • 带参数的宏定义格式为:#define <宏名>(<参数表>)<宏体>。其中,<宏名>是一个 标识符,<参数表>中的参数可以是一个,也可以是多个,视具体情况而定,当有多个参数 的时候,每个参数之间用逗号分隔。<宏体>是被替换用的字符串,宏体中的字符串是由参数表中的各个参数组成的表达式。
  • 宏定义与操作符的区别:宏定义是替换,不做计算,也不做表达式求解。另外宏定义的替换在编译前进行,所以它不占用内存。宏的展开不占运行时间,只占编译时间,而操作符则占运行时间。

答案: 宏定义是C++ 的预处理命令之 一 ,它是 一个替换操作,不做计算和表达式求解,不占
用内存和编译时间。

8.包含头文件时,如何查找?

答案:
在C++中,包含头文件是一种常见的技术,用于向程序中添加预定义的代码和声明。当编译器遇到#include指令时,会查找相应的头文件并将其包含到源代码中。
通常情况下,编译器查找头文件的路径由以下几个因素决定:

  1. 系统默认路径:编译器通常会在系统默认的头文件路径中查找所需的头文件。这些路径可能包括操作系统的标准库、编译器安装目录等。
  2. 环境变量:有些编译器可能会从环境变量中获取额外的头文件搜索路径。例如,在Linux系统中,可以通过设置$CPLUS_INCLUDE_PATH环境变量来添加额外的头文件路径。
  3. 编译器选项:有些编译器提供了选项来指定额外的头文件路径。例如,在GCC中,可以使用-I选项来添加额外的头文件搜索路径。
    在实际编程中,如果需要包含一个头文件,但编译器无法找到该头文件,就会发生编译错误。为了避免这种情况,可以采取以下措施:
  4. 明确指定头文件路径:如果头文件不在默认的搜索路径中,可以使用编译器提供的选项或者环境变量来指定额外的搜索路径。
  5. 将头文件放在当前目录或项目目录:将头文件直接放在当前目录或项目目录下,编译器会自动搜索当前目录和项目目录。
  6. 使用相对路径或绝对路径:可以使用相对路径或绝对路径来包含头文件。相对路径是相对于当前源代码文件的路径,而绝对路径是从根目录开始的完整路径。

9.虚函数与纯虚函数的区别

答案:
在C++中,虚函数和纯虚函数都是用于实现多态性的重要机制。它们都需要通过继承来使用,并且都可以被子类重写。
虚函数是一种在基类中声明的函数,在派生类中可以进行重写。当通过基类指针或引用调用虚函数时,实际执行的是派生类中的版本。虚函数可以有实现,如果在基类中定义了虚函数的实现,那么派生类可以选择保留该实现或进行修改。虚函数可以通过关键字virtual来声明,并且可以通过关键字override来显式地重写。
纯虚函数是一种在基类中声明但没有实现的虚函数。它需要在派生类中进行具体的实现,否则派生类也将成为抽象类。纯虚函数可以通过在函数声明后加上=0来声明,例如:

class Base {
public:virtual void foo() = 0; // 纯虚函数
};

需要注意的是,包含纯虚函数的类通常被称为抽象类,它无法被直接实例化。如果想要使用这个类,必须先创建一个派生类并实现所有的纯虚函数。此外,派生类也可以选择重写其父类的非纯虚函数,以满足自己的需求。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2、NLP文本预处理技术:词干提取和词形还原

一、说明 在上一篇文章中&#xff0c;我们解释了文本预处理的重要性&#xff0c;并解释了一些文本预处理技术。在本文中&#xff0c;我们将介绍词干提取和词形还原主题。 词干提取和词形还原是两种文本预处理技术&#xff0c;用于将单词还原为其基本形式或词根形式。这些技术的…

第03章_基本的SELECT语句

第03章_基本的SELECT语句 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 1. SQL概述 1.1 SQL背景知识 1946 年&#xff0c;世界上第一台电脑诞生&#xff0c;如今&#xff0c;借由这台电脑发展…

云计算是什么

一文读懂云计算&#xff1a;发展历程、概念技术与现状分析 - 知乎 “现阶段所说的云计算&#xff0c;已经不单单是一种分布式计算&#xff0c;而是分布式计算、效用计算、负载均衡、并行计算、网络存储、热备份冗杂和虚拟化等计算机技术混合演进并跃升的结果。” 云计算的关键…

oracle 重启步骤及踩坑经验

oracle 重启步骤及踩坑经验 标准重启步骤 切换到oracle用户 su - oracle关闭监听 lsnrctl stop杀掉oracle有关进程 ps -ef|grep $ORACLE_SID|grep -v ora_|grep LOCALNO|awk {print $2}|xargs kill -9#查询pid ps -ef|grep $ORACLE_SID|grep -v ora_|grep LOCALNO|awk {p…

恒驰服务 | 华为云数据使能专家服务offering之数仓建设

恒驰大数据服务主要针对客户在进行智能数据迁移的过程中&#xff0c;存在业务停机、数据丢失、迁移周期紧张、运维成本高等问题&#xff0c;通过为客户提供迁移调研、方案设计、迁移实施、迁移验收等服务内容&#xff0c;支撑客户实现快速稳定上云&#xff0c;有效降低时间成本…

上海中优城市万豪酒店推出全新国际IP童趣主题房,独特住宿体验中国首秀

2023年10月30日&#xff0c;中国上海 – 近日&#xff0c;上海中优城市万豪酒店正式推出由全球品牌娱乐公司孩之宝官方授权打造的小马宝莉和变形金刚主题客房&#xff0c;以创意客房、新奇体验和丰富礼遇&#xff0c;为童游家庭或年轻的动漫迷们开启沉浸式入住之旅&#xff0c;…

Latex报错 “Paragraph ended before \Gin@iii was complete“

大家看看自己的模版的前面 加载的包 里面是不是有个 \usepackage{graphics} 问题就在这里&#xff0c;我们需要把它改成\usepackage{graphicx}

xmind2testcase使用与二次开发

xmind2testcase安装、简单二次开发与使用说明&#xff1a; 添加xmind文件备份 重构生成CSV文件 preview预览页面数据显示重构 一、安装 1.xmind2testcase安装 pip install xmind2testcase 2.启动服务 进入默认位置&#xff1a;C:\Users\dell\AppData\Roaming\Python\Py…

集简云slack(自建)无需API开发轻松连接OA、电商、营销、CRM、用户运营、推广、客服等近千款系统

slack是一个工作效率管理平台&#xff0c;让每个人都能够使用无代码自动化和 AI 功能&#xff0c;还可以无缝连接搜索和知识共享&#xff0c;并确保团队保持联系和参与。在世界各地&#xff0c;Slack 不仅受到公司的信任&#xff0c;同时也是人们偏好使用的平台。 官网&#x…

ROS自学笔记二十六:导航中激光雷达消息

在ROS导航中&#xff0c;激光雷达&#xff08;Laser Scanner&#xff09;通常被用于感知机器人周围的环境&#xff0c;进行障碍物检测和建图&#xff0c;以支持导航。下面是激光雷达的详细介绍以及一个示例&#xff1a; 激光雷达简介&#xff1a; 激光雷达是一种传感器&#…

生产级 React 框架介绍

文章目录 生产级 React 框架生产级 React 框架Next.jsRemixGatsbyExpo 如何选择生产级 React 框架 生产级 React 框架 React 是一个流行的 JavaScript 框架&#xff0c;用于构建用户界面。React 框架可以帮助你快速构建高质量的 React 应用&#xff0c;但并不是所有的 React 框…

什么是Web 3.0?

什么是Web 3.0&#xff1f;简而言之&#xff0c;就是第三代互联网。 在回答Web 3.0之前&#xff0c;让我们先看一下Web 1.0和Web 2.0。 互联网革命 Web 1.0&#xff0c;第一代互联网&#xff0c;从互联网诞生到1997年。 在Web 1.0&#xff0c;互联网的信息是静态的只读网页&a…

问题 C: 搬寝室(DP)

算法分析&#xff1a; 题目意思为求n个物品&#xff0c;拿k对使得消耗的体力最少&#xff0c; 或者说是这k对物品&#xff0c;每一对中两件物品的质量差平方最小&#xff0c; 所以要使得质量差的平方小&#xff0c;只能排序后取质量相邻两个物品作为一对&#xff1b; 现在设f…

SpringBoot常用拦截器之ClientHttpRequestInterceptor

一、SpringBoot常用拦截器 下面3种拦截器&#xff0c;都是http拦截器&#xff0c;在处理业务逻辑之前对http请求信息进行处理&#xff0c;比如获取请求头&#xff0c;请求参数&#xff0c;设置请求头&#xff0c;请求参数等等 思路清晰&#xff0c;先说jar包: HandlerInterc…

如何用ChatGPT快速写出一份合格的PPT报告

我们【AI写稿专家】的小伙伴中有很多企业高管和公务员&#xff0c;大家经常有写报告写ppt的需求&#xff0c;下面小编给大家介绍一下我们新发布生成PPT的功能&#xff0c;很简单很方便&#xff0c;看完大家不到1分钟就能生成一份拿得出手的PPT报告&#xff0c;再也不用费尽心思…

摩托车不按规定行驶最右侧车道,发生事故恐担责

《道路交通安全法实施条例》第四十四条规定&#xff1a; 在道路同方向划有2条以上机动车道的&#xff0c;左侧为快速车道&#xff0c;右侧为慢速车道。在快速车道行驶的机动车应当按照快速车道规定的速度行驶&#xff0c;未达到快速车道规定的行驶速度的&#xff0c;应当在慢速…

Python ❀ 案例 - 乘法表

打印99乘法表 # 正向排序 def zhengxv(num:int):for i in range(1,num1):for j in range(1,i1):if j*i > 9:print("{}x{}{}".format(j, i, j*i),end" ")else:print("{}x{}{} ".format(j, i, j * i), end" ")print(end"\n"…

NR和4K NR

NR(Noise Reduction)是电视产品中的一种令噪声降噪功能。它是电视产品图像处理中的重要算法之一。 NR主要起以下作用: 1. 去除画面的噪声点。能识别并去除画面的各种随机噪点,如电视信号干扰或者模拟转数字时产生的噪音。 2. 消除模糊带。能去除数字信号频道转换时产生的模糊…

【设计模式】第25节:行为型模式之“访问者模式”

一、简介 访问者模式允许一个或者多个操作应用到一组对象上&#xff0c;设计意图是解耦操作和对象本身&#xff0c;保持类职责单一、满足开闭原则以及应对代码的复杂性。 二、优点 分离操作和数据结构增加新操作更容易集中化操作 三、适用场景 数据结构稳定&#xff0c;操…

私有网络的安全保障,WorkPlus Meet内网视频会议助力企业高效会议

在企业内部沟通与协作中&#xff0c;视频会议成为了一种必不可少的沟通方式。然而&#xff0c;传统的互联网视频会议往往受制于网络不稳定因素&#xff0c;给企业带来不便与困扰。WorkPlus Meet作为一款专注内网视频会议的软件&#xff0c;致力于为企业打造高效、稳定的内网视频…