当前位置: 首页 > news >正文

速看!这8道嵌入式面试题你都会吗?

大家好,我是知微

正逢求职季,分享一些嵌入式面试当中经常会遇到的题目,希望这些干货对小伙伴们面试有用哦!

1、介绍一下static关键字的作用

在C语言中,static 关键字有几种不同的作用,根据其用途可以大致分类如下:

  • 局部变量:当static用于函数内的局部变量时,它使该变量的值在函数调用之间持久化,即变量在函数的多次调用间不会被重新初始化。它仍然只在声明它的代码块内可见。
  • 全局变量:将全局变量声明为static,可以限制其链接范围仅限于定义该变量的文件内部,也就是说,它不可以被其他文件通过extern外部声明所访问。
  • 函数:如果一个函数被声明为static,它的链接范围也将限制在其定义的文件内。在文件外部不可见,不能被其他文件调用。
  • 类成员:在面向对象的编程语言中,如C++或Java,static可以用来声明静态成员变量和成员函数。静态成员被该类的所有实例共享,不属于任何单独的对象实例。静态成员函数同样不属于任何单个对象,因而没有this指针,并且只能访问其类的静态成员。

2、介绍一下const关键字的作用

const 关键字在C语言中用来声明一个常量。被const修饰的变量在定义后不可更改。const可以用于不同的上下文中:

  • 局部变量:标记函数内的局部变量为常量,意味着该变量的值在其作用域内不能被改变。
  • 全局变量:用const修饰全局变量,可以设置跨文件的不可变数据。
  • 指针const用于指针时,可以让指针指向的值或者指针本身的值(指向的地址)不可变。例如,const int *ptr表示指向的int值不可改变,而int * const ptr表示指针ptr的值(地址)不可更改。
  • 函数参数:如果函数的参数被标记为const,意味着传递给函数的变量在函数内不会被改变,这对于引用和指针参数尤其重要,因为它告诉用户这些参数是用来读取而非修改的。
  • 类成员:在C++中,const可以用于成员函数,表明该成员函数不会修改其所属的对象。这样的成员函数可以被一个const对象调用。

3、头文件中的 ifndef/define/endif 是干什么用的?

#ifndef#define#endif 这三个预处理指令用于防止头文件重复包含。首次包含时,它会定义一个宏,如果该头文件被再次包含,#ifndef 检测到宏已定义,就会跳过头文件内容,避免重复定义错误。

4、用变量a定义

a)一个整型数
b) 一个指向整型数的指针
c) 一个指向指针的的指针,它指向的指针是指向一个整型数
d) 一个有10个整型数的数组
e) 一个有10个指针的数组,该指针是指向一个整型数的:
f) 一个指向有10个整型数数组的指针
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
h) 一个有10个函数指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

a) int a; 
b) int *a;
c) int **a;
d) int a[10]; 
e) int *a[10];
f) int ( *a)[10];
g) int ( *a)(int);
h) int ( *a[10])(int);

5、new和malloc的区别

  1. 类型安全
    • new 是 C++ 中的运算符,它自动计算需要分配的空间大小,并返回正确的类型指针,无需类型转换。
    • malloc 是 C 语言中的库函数,它需要手动计算字节数,并返回 void* 类型,使用时通常需要强制类型转换。
  2. 构造/析构函数
    • new 在分配内存的同时调用对象的构造函数,为对象的成员赋予初始值。
    • malloc 仅分配内存,不调用构造函数,因此不初始化内存。
  3. 异常处理
    • new 分配内存失败时会抛出异常(bad_alloc)。
    • malloc 分配内存失败时返回 NULL
  4. 匹配操作
    • 使用 new 分配的内存应该用 delete 来释放。
    • 使用 malloc 分配的内存应该用 free 来释放。
  5. 内存分配方式
    • new 通常分配的是单个对象的内存。
    • malloc 用来分配一段指定大小的内存区域,适合分配数组形式的内存块。
  6. 重载
    • new 可以被重载以提供自定义的内存分配行为。
    • malloc 不能被重载,因为它是 C 标准库中的一个函数。

6、嵌入式系统中经常要用到无限循环,如何用C编写死循环

  • 使用 while 循环:
while(1) {// 这里放置循环体内的代码
}
  • 使用 for 循环:
for(;;) {// 这里放置循环体内的代码
}
  • 使用 do-while 循环:
do {// 这里放置循环体内的代码
} while(1);
  • 使用 goto 语句:
LOOP_START: // 这里放置循环体内的代码
goto LOOP_START;

虽然 goto 方法可以实现

7、隐式转换规则

如下代码的输出结果是?为什么?

#include <stdio.h>
int main(void)
{
unsigned int a = 6;
int b = -20;if (a + b > 6)
printf("a+b大于6\n");
else
printf("a+b小于6\n");return 0;
}

输出结果

a+b大于6

解析

因为编译器会将有符号数b转换成为一个无符号数,即此处 a+b 等价于 a+(unsigned int)b

该程序运行在32bit环境下,b的值为0xFFFFFFFF-20+1 = 4294967276,即a+b将远远大于6。

C 语言按照一定的规则来进行此类运算的转换,转换的顺序为:

double>float>unsigned long>long>unsigned int>int

8、sizeof和strlen的区别是什么?

  1. sizeof() 是一个运算符,而 strlen() 是一个函数。
  2. sizeof() 计算的是变量或类型所占用的内存字节数,而 strlen() 计算的是字符串中字符的个数。
  3. sizeof() 可以用于任何类型的数据,而 strlen() 只能用于以空字符 ‘\0’ 结尾的字符串。
  4. sizeof() 计算字符串的长度,包含末尾的 ‘\0’,strlen() 计算字符串的长度,不包含字符串末尾的 ‘\0’。

以上就是今天要分享的内容了!

📢你的每一次👍点赞 ⭐收藏 📝评论,都是我更新的动力,如有错误请留言指正,非常感谢!

相关文章:

速看!这8道嵌入式面试题你都会吗?

大家好&#xff0c;我是知微&#xff01; 正逢求职季&#xff0c;分享一些嵌入式面试当中经常会遇到的题目&#xff0c;希望这些干货对小伙伴们面试有用哦&#xff01; 1、介绍一下static关键字的作用 在C语言中&#xff0c;static 关键字有几种不同的作用&#xff0c;根据其…...

基于SSM的电影网站(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的电影网站&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMv…...

SOCKS代理是如何提高网络性能和兼容性的?

SOCKS代理作为一种网络协议中间件&#xff0c;不仅在提升网络隐私和安全性方面发挥着重要作用&#xff0c;也在提高网络性能和兼容性方面有着不容忽视的影响&#x1f680;。本文将深入探讨SOCKS代理如何通过减少网络延迟&#x1f680;、优化数据传输&#x1f504;、提高跨平台兼…...

好菜每回味道不同--建造者模式

1.1 炒菜没放盐 中餐&#xff0c;老板需要每次炒菜&#xff0c;每次炒出来的味道都有可能不同。麦当劳、肯德基这些不过百年的洋快餐却能在有千年饮食文化的中国发展的那么好呢&#xff1f;是因为你不管何时何地在哪里吃味道都一样&#xff0c;而鱼香肉丝在我们中餐却可以吃出上…...

RuoYi-Cloud下载与运行

一、源码下载 若依官网:RuoYi 若依官方网站 鼠标放到"源码地址"上,点击"RuoYi-Cloud 微服务版"。 跳转至Gitee页面,点击"克隆/下载",复制HTTPS链接即可。 源码地址为:https://gitee.com/y_project/RuoYi-Cloud.git 点击复制 打开IDEA,选…...

Vue2.x计算属性

1.计算属性 在Vue 插值表达式内实现一些操作其实非常便利&#xff0c;但如果表达式的逻辑过于复杂&#xff0c;会让插值过于臃肿且难以维护。这时可以考虑使用Vue的计算属性 1.1 不使用计算属性的例子 <!DOCTYPE html> <html><head><meta charset"…...

Vue中使用require.context()自动引入组件和自动生成路由的方法介绍

目录 一、自动引入组件 1、语法 2、使用 2.1、在compoents文件下随便创建index.js文件 2.2、mian.js引入该js 二、自动生成路由 1、示例&#xff1a; 2、使用 2.1、在router文件下随便创建autoRouter.js文件 2.2、在router文件下index.js文件中引入autoRouter.js文件…...

【炒股Zero To Hero】MACD金叉死叉到底是否有效,加上这个指标回报率增加197倍

移动平均收敛散度&#xff08;MACD - Moving Average Convergence Divergence&#xff09;是一种趋势跟踪动量指标&#xff0c;显示了证券价格的两个移动平均之间的关系。它用于识别趋势的方向和强度&#xff0c;属于技术分析中振荡器的一类。 MACD如何衡量股票及其趋势 有两…...

Linux网络名称空间和虚拟机有何区别

在Linux系统中&#xff0c;网络名称空间和虚拟机都是实现资源隔离和虚拟化的技术&#xff0c;但它们在设计理念、实现机制、资源消耗、使用场景等方面存在着显著的区别。本文旨在全方位、系统性地分析这两种技术的区别。&#x1f50d; 1. 设计理念与实现机制 1.1. 网络名称空…...

【UE Niagara】蓝图获取粒子数据

目录 效果 步骤 一、创建粒子 二、创建蓝图接收Niagara参数 效果 步骤 一、创建粒子 1. 新建一个Niagara发射器&#xff0c;使用Empty模板&#xff0c;打开后先添加“Spawn Rate”模块&#xff0c;这里设置粒子生成速率为0.7 在“Initialize Particle”模块中设置粒子颜色…...

更改el-cascade默认的value和label的键值

后端返回的树结构中&#xff0c;label的key不是el-cascade默认的label&#xff0c;我需要改成对应的字段&#xff0c;但是一直没有成功&#xff0c;我也在文档中找到了说明&#xff0c;但是我没注意这是在props中改&#xff0c;导致一直不成功 这是我一开始错误的写法&#xf…...

2024邮件工单系统排行揭晓:出海必备新宠

2024年各大榜单结果纷纷出炉&#xff0c;一起来看看2024十大邮件工单系统最新排行吧&#xff01; 2024十大邮件工单系统 1、Zoho Desk&#xff1b;2、FreshDesk&#xff1b;3、Service Desk Plus&#xff1b;4、Help Scout&#xff1b;5、Helpshift&#xff1b;6、HongDans&am…...

java题目17:以m行n列二维数组为参数进行方法调用,分别计算二维数组各列元素之和,返回并输出计算结果(MethodCalls17)

每日小语 伟大企业的一项特质是“利润之上的追求”。——段永平 思考 方法调用 方法调用是通过在代码中使用方法名和参数列表来实现的。 public class MethodExample {public static void main(String[] args) {// 调用方法add&#xff0c;并传入两个参数int sum add(3, 5…...

Python中Python-docx 包的run介绍

先对run做一个简单地介绍。每个paragraph对象都包含一个run对象的列表。举例&#xff1a; 这是一个简短的段落。 from docx import Document doc Document("1.docx") #上面这段话保存在1.docx中 print("这一段的run个数是&#xff1a;",len(doc.paragr…...

vue2升级到vue3的一些使用注意事项记录(三)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…...

SwiftUI Swift 显示隐藏系统顶部状态栏

Show me the code // // TestHideSystemTopBar.swift // pandabill // // Created by 朱洪苇 on 2024/4/1. //import SwiftUIstruct TestHideSystemTopBar: View {State private var isStatusBarHidden falsevar body: some View {Button {withAnimation {self.isStatusBa…...

PowerJob 分布式任务调度简介

目录 适用场景 设计目标 PowerJob 功能全景 任务调度 工作流 分布式计算 动态容器 什么是动态容器? 使用场景 可维护性和灵活性的完美结合 实时日志&在线运维 PowerJob 系统组件 PowerJob 应用场景 PowerJob 的优势 PowerJob&#xff08;原OhMyScheduler&…...

Java——数组练习

目录 一.数组转字符串 二.数组拷贝 三.求数组中元素的平均值 四.查找数组中指定元素(顺序查找) 五.查找数组中指定元素(二分查找) 六.数组排序(冒泡排序) 七.数组逆序 一.数组转字符串 代码示例&#xff1a; import java.util.Arrays int[] arr {1,2,3,4,5,6}; String…...

波士顿房价预测案例(python scikit-learn)---多元线性回归(多角度实验分析)

波士顿房价预测案例&#xff08;python scikit-learn&#xff09;—多元线性回归(多角度实验分析) 这次实验&#xff0c;我们主要从以下几个方面介绍&#xff1a; 一、相关框架介绍 二、数据集介绍 三、实验结果-优化算法对比实验&#xff0c;数据标准化对比实验&#xff0…...

在 Queue 中 poll()和 remove()有什么区别?

在Java的Queue接口中&#xff0c;poll()和remove()方法都用于从队列中删除并返回队列的头部元素&#xff0c;但是它们在队列为空时的行为有所不同。 poll()方法&#xff1a;当队列为空时&#xff0c;poll()方法会返回null&#xff0c;而不会抛出异常。这是它的主要特点&#x…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...