嵌入式面试——C语言和数据结构篇(二)

news2024/11/26 17:31:12

本篇为C语言和数据结构篇(二)

1、关键字static的作用是什么?

答:

在C语言中,关键字static有三个明显的作用:

1>在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

2>在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

3>在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

2、“引用”与指针的区别是什么?

答 :

1>引用必须被初始化,指针不必。

2>引用初始化以后不能被改变,指针可以改变所指的对象。

3>不存在指向空值的引用,但是存在指向空值的指针。

        指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性 差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。

3、.h头文件中的ifndef/define/endif 的作用?

答:

        防止该头文件被重复引用。

4、#include<file.h> 与 #include "file.h"的区别?

答:

        前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。

5、描述实时系统的基本特性

答 :

        在特定时间内完成特定的任务,实时性与可靠性。

6、全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

答 :

        全局变量储存在静态数据区,局部变量在堆栈中。

7、什么是平衡二叉树?

答 :

        左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1。

8、堆栈溢出一般是由什么原因导致的?

答 :

1>没有回收垃圾资源

2>层次太深的递归调用

9、局部变量能否和全局变量重名?

答:

        能,局部会屏蔽全局。要用全局变量,需要使用"::"

        局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

10、如何引用一个已经定义过的全局变量?

答 :

        可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错,如果你用 extern 方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

11、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

答 :

        可以,在不同的C文件中以static形式来声明同名全局变量。

        可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

12、do……while 和 while……do 有什么区别?

答 :

        前一个循环一遍再判断,后一个判断以后再循环。

13、++i 和 i++有什么区别?

答:

        ++i 和 i++ 都是自增操作符,但它们的区别在于自增的时机和返回值。

        ++i(前缀递增): ++i 表示先将变量 i 的值加 1,然后再使用加 1 后的值。

int i = 5;

int result = ++i;

System.out.println(result); // 输出 6

        i++(后缀递增): i++ 表示先使用变量 i 的当前值,然后再将 i 的值加 1。

int i = 5;

int result = i++;

System.out.println(result); // 输出 5

        总的来说,++i 和 i++ 的区别在于自增操作的时机,即先递增还是先使用当前值。

14、什么是预编译,何时需要预编译?

答:

        预编译又称为预处理,是做些代码文本的替换工作。处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等,就是为编译做的预备工作的阶段,主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。

        c 编译系统在对程序进行通常的编译之前,先进行预处理。

        c提供的预处理功能主要有以下三种:

1>宏定义   

2>文件包含   

3>条件编译

        1、 总是使用不经常改动的大型代码体。 

        2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。

15、Const 关键词

        以下关于 const 定义的代码分别是什么意思?

const int a;

int const a;

const int *a;

int * const a;

int const * a const;

答:

        第一、二的作用是一样,a是一个常整型数。

        第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。

        第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。

        最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。

16、关键字volatile有什么含意?并给出三个不同的例子。

答:

        一个定义为 volatile 的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。

        下面是volatile变量的几个例子:

1> 并行设备的硬件寄存器(如:状态寄存器)

2> 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

3> 多线程应用中被几个任务共享的变量

17、有关volatile:

Q1:一个参数既可以是const还可以是volatile吗?解释为什么。

A1:可以。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

Q2: 一个指针可以是volatile 吗?解释为什么。

A2:可以。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。

18、结构体与联合体有和区别?

答:

1>结构体和联合体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合体中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构体的所有成员都存在(不同成员的存放地址不同)。 

2>对于联合体的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的。

19、论述含参数的宏与函数的优缺点

20、用两个栈实现一个队列的功能?要求给出算法和思路!

答 、

设2个栈为A,B,一开始均为空。

入队:

        将新元素push入栈A;

出队:

        (1)判断栈B是否为空;

        (2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;

        (3)将栈B的栈顶元素pop出;

这样实现的队列入队和出队的平摊复杂度都还是O(1)。

21、嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?

答:

while(1)
{


}

尽量不要使用

for(;;)
{


}

因为这样写的话,有可能面试官会让你解释一下这个语法以及为什么要这样写。

22、位操作(Bit manipulation) 

问:

        嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。

答:

        用 #defines 和 bit masks 操作。这是一个有极高可移植性的方法,解决方案如下:

#define BIT3 (0x1 << 3)

static int a;

void set_bit3(void) 

{

    a |= BIT3;

}

void clear_bit3(void) 

{

    a &= ~BIT3;

}

        

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

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

相关文章

深度解读数字化转型的核心驱动因素与实践指南从战略到落地

数字化转型的战略重心 在当今商业环境中&#xff0c;数字化转型不仅是企业提升效率的工具&#xff0c;更是创造竞争优势的必要条件。随着技术的飞速发展&#xff0c;企业在面对市场动态变化时&#xff0c;依赖于其数字化基础设施、数据处理能力以及对新技术的敏捷反应能力&…

嵌入式面试——FreeRTOS篇(六) 任务通知

本篇为&#xff1a;FreeRTOS 任务通知篇 任务通知简介 1、任务通知介绍 答&#xff1a; 任务通知&#xff1a;用来通知任务的&#xff0c;任务控制块中的结构体成员变量ulNotifiedValue就是这个通知值。 使用队列、信号量、事件标志组时都需要另外创建一个结构体&#xff0c…

【JAVA开源】基于Vue和SpringBoot的高校学科竞赛平台

本文项目编号 T 075 &#xff0c;文末自助获取源码 \color{red}{T075&#xff0c;文末自助获取源码} T075&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 教…

如何使用DAMODEL进行AI开发教程

DAMODEL&#xff1a;DAMODEL 目前DAmodel注册并实名赠送50大洋的免费额度&#xff0c;搭载4090的服务器费用不到2r/h 教程&#xff1a; 完成注册并实名后 在此点击创建实例 选择实例配置 选择镜像&#xff0c;看你使用哪种dl框架 设置完毕后创建密钥并选择该密钥。 创建…

防火墙的三种工作模式:路由模式、透明模式(网桥)、混合模式

防火墙作为网络安全的核心设备之一&#xff0c;扮演着至关重要的角色。它不仅能够有效防御外部网络的攻击&#xff0c;还能保护内部网络的安全。在如今复杂多样的网络环境下&#xff0c;防火墙的部署和工作模式直接影响着网络安全策略的实施效果。防火墙通常可以工作在三种模式…

论文阅读笔记-Self-Attention

前言 Self-Attention能够将每个元素和当前时刻元素进行比较来确定上下文元素的重要性,这也使得它在NLP模型中表现优异。而本篇文章则是将卷积结构与Self-Attention结构进行了比较,通过 实验证明了这样的卷积结构同样有着高效的计算和足以和Self-Attention媲美的效果。本篇文…

【AAOS】Android Automotive 9模拟器源码下载及编译

源码下载 repo init -u https://android.googlesource.com/platform/manifest -b android-9.0.0_r61 repo sync -c --no-tags --no-clone-bundle 源码编译 source build/envsetup.sh lunch aosp_car_x86_64-userdebug make -j8 运行效果 emulator Home界面 MAP All apps S…

python爬虫 - 数据提取

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、数据类型及其对应的提取策略 &#xff08;一&#xff09;文本数据 &…

网约巴士订票系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;巴士信息管理&#xff0c;积分兑换管理&#xff0c;积分纪录管理&#xff0c;新闻信息管理&#xff0c;基础数据管理 微信端账号功能包括&#xff1a;系统…

国产长芯微LDC8531低功耗轨到轨输出 16 位串行输入数模转换器完全P2P替代DAC8531

描述 LDC8531是一款低功耗、单16位缓冲电压输出数模转换器&#xff08;DAC&#xff09;。其片上精密输出放大器允许实现轨到轨输出摆动。LDC8531使用多功能三线串行接口&#xff0c;其时钟频率高达30MHz&#xff0c;与标准SPI、QSPI、Microwire和数字信号处理器&#xff08;DSP…

数据库迁移中的权限问题及解决方法——以Error 1142为例

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

无线领夹麦克风哪个降噪好?选购领夹麦克风需注意的五大隐藏风险

不知道大家有没有遇到这样一个情况&#xff0c;为什么有些视频或直播的声音听起来那么清晰&#xff0c;仿佛身临其境&#xff0c;而自己拍的视频却总是嘈杂不堪&#xff0c;尤其是在户外拍摄的时候&#xff0c;音频中更是充斥着各种各样的噪音。这种问题主要还是麦克风的原因所…

3dmax笔记-ALT X 透明度设置

1 降低max的模型的透明度 ALTX 看区别 区别对比

Sentinel最全笔记,详细使用步骤教程清单

一、Sentinel的基本功能 1、流量控制 流量控制在网络传输中是一个常用的概念&#xff0c;它用于调整网络包的发送数据。然而&#xff0c;从系统稳定性角度考虑&#xff0c;在处理请求的速度上&#xff0c;也有非常多的讲究。任意时间到来的请求往往是随机不可控的&#xff0c;…

分辨率提高4到8倍!AI高清修复工具-upscayl使用方法!

你还在为手中的模糊照片苦恼吗&#xff1f; 是不是想把老照片或低分辨率的图片用于大尺寸印刷&#xff0c;却因为画质糟糕而无从下手&#xff1f; 现在你不再需要高深的Photoshop技能&#xff0c;也不用花费巨资找人修图。借助AI高清修复工具Upscayl&#xff0c;只需几秒钟&am…

一文解读数据中台附搭建指南

数据是企业的核心资产&#xff0c;更是企业数字化转型的关键驱动力。为了更好地管理和利用数据&#xff0c;进行数据共享&#xff0c;充分发挥数据的作用&#xff0c;越来越多的企业开始构建实时数据中台。 一数据中台 定义&#xff1a;数据中台是将企业内部各个部门、系统、应…

【嵌入式软件-STM32】STM32简介

目录 一、STM32定义 二、STM32用途 三、STM32特点 四、STM32 四个系列 五、了解ARM 六、芯片解释 七、片上资源 八、命名规则 九、系统结构 内核 Flash DMA 外设种类和分布 十、引脚定义 类型 名称 引脚 十一、启动配置 十二、STM32最小系统电路 STM32及供电 供电引脚 滤波电容…

机器人动力学和轨迹规划

路径规划&#xff08;way&#xff09;&#xff1a;规划连接位置A与位置B间序列点或曲线的策略。 注意&#xff1a;这个路径规划是非常重要的&#xff0c;是机器人智能的一个体现。 路径规划主要有3个方法&#xff1a;MoveJ&#xff1a;关节点到点运动&#xff0c;MoveL&#…

Spring Boot学习资源库:Java开发者的新篇章

2 相关技术简介 2.1Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xff0c;任…

crossover和虚拟机哪个好用?Mac电脑玩游戏用哪个软件?

由于大多数热门游戏都是针对Windows平台开发的&#xff0c;这对于Mac用户来说可能会带来一些困扰。幸运的是&#xff0c;有几款虚拟机软件可以帮助解决这个问题&#xff0c;其中最常提到的是Parallels Desktop&#xff08;简称PD虚拟机&#xff09;和CrossOver。 PD虚拟机&…