|
在嵌入式工程领域,面试过程中通常会遇到一系列核心和深入的问题,以评估应聘者的专业知识和技能。今天,我们将探讨20个嵌入式工程师面试中常见的问题,这些问题旨在探索应聘者的理论基础、实践经验以及解决问题的能力。通过这些问题,面试官能够更全面地了解应聘者的专业素养和适应岗位的能力。
在接下来的讨论中,我们将逐一分析这些问题,并提供一些建议和思考方向,以帮助应聘者更好地准备面试,展示自己的专业实力和潜力。无论您是即将参加面试的嵌入式工程师,还是对此领域感兴趣的人士,相信这些问题和讨论都会为您带来宝贵的启示和帮助。
01Q:嵌入式系统中经常要用到无限循环,如何用C编写死循环?
A:while(1){}或者for(;;)
02Q:程序的局部变量存在于哪里,全局变量存在于哪里,动态申请数据存在于哪里?
A:程序的局部变量存在于栈区;全局变量存在于静态区;动态申请数据存在于堆区。
03Q:关键字const有什么含义?
A:1)只读。2)使用关键字const也许能产生更紧凑的代码。3)使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。
04Q:请问以下代码有什么问题:
int main() {
char a;
char *str=&a;
strcpy(str,"hello");
printf(str);
return 0;
}
A:没有为str分配内存空间,将会发生异常,问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。
05Q:已知一个数组table,用一个宏定义,求出数据的元素个数
A:# define NTBL (sizeof(table)/sizeof(table[0]))
06Q:写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。
A: #define MIN(A,B) ((A) <= (B) ? (A) : (B))
考点:
1) 标识#define在宏中应用的基本知识。这是很重要的。因为在 嵌入(inline)操作符 变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。
2) 三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优的代码,了解这个用法是很重要的。
3) 懂得在宏中小心地把参数用括号括起来。
07Q: do……while和while有什么区别?
A:前一个循环一遍再判断,后一个判断以后再循环。
08Q:什么是预编译,何时需要预编译?
A:1、总是使用不经常改动的大型代码体。2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。
预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。
09Q: 一个32位的机器,该机器的指针是多少位?
A: 指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。
010Q:局部变量能否和全局变量重名?
A:能,局部会屏蔽全局。
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
|
|