昨天分享四道嵌入式 C 语言面试题目,在发完文章后,就有好多网友说后面文章里面可不可以多搞点面试题目,暂时打算写个 5 篇左右的嵌入式面试题目,如果确实对各位有很大的帮助,后期再继续分享。
昨天面试题目答案
1、第一道题目的理解是,假设是在 32 位的系统上,一个内存单元就有 4 个字节,把这四个单元看成一个个放东西的“柜子”,标号分别为 1 2 3 4,那么数值 0x12345678,那么低字节上的 78 就放到第一个柜子里面去,高字节上的12放到第四个柜子里面去,其它按照顺序放。
2、第二题目,主要是考察数值溢出问题,这个比较容易发现,细心注意就行。这道题目如果面试官再进一步问的话,如果解决这个溢出问题时,你可以回答在右括号左边加一个"ul"就行,这个编译的时候就不报数据溢出警告了。
3、第三道题目,有网友说使用const关键字修饰,这个也可以这样,但是不知道各位网友有没有老司机在工作当中还有其它更好的办法来解决这个问题。
4、第四道题目可以使用#pragma pack (n) 来实现,具体想了解这个用法可以参考这篇文章——剖析c语言结构体的高级用法(二)。
今天面试题目分享
1、c语言里面关键static的作用是什么?(看到这个问题读者可以自己先思考一下,再看答案)
答案: (1)、在函数体中,一个被声明为静态的变量在这一函数被调用过程中维持其值保持不变。
(2)、在模块内,模块就是你写的".C"文件(在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但是不能被模块外其它函数访问,它相当于一个本地的一个静态全局变量(注意它和非静态全局变量的区别哦)。
(3)、在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。也就是说,这个函数被限制在声明它的模块本地内使用,不可以在模块外使用。
2、写一个“标准”宏,这个宏输入两个参数并返回较小的一个;同时讲出 # 与 ##的作用区别?
答案:
(1)、第一个问题可以这样来写,注意里面使用了三目运算符:
#define MIN(x,y) ((x)<(y)?(x):(y))
(2)、"#"作用是把宏参数转化为字符串的运算符,而"##"是把两个宏参数连接的运算符:
#define STR(arg) #arg
这里当参数 arg 为 hello ,则宏展开的结果是"hello"
#define STR(arg) name_y
#define STR(arg) name_##y
#define STR(arg,arg2) arg arg2##_##arg2##_arg2
上面示例中,假设 arg 为 int , arg2 为 a ,则上面宏展开的结果为:
name_y
name_int
inta_a_a
3、C语言里面关键字sizeof的作用是什么?
答案:
(1)sizeof是在编译阶段处理,且不能被编译为机器码。还有一点,很多人会认为它是一个库函数;它的作用是计算出各种类型变量或者结构所占的字节数:
int a ,sizeof(a)
int *a,sizeof(a)
int a[10],sizeof(a)
int a[0],sizeof(a)
sizeof(void)
sizeof(void *)
上面演示结果:
4
4
40
0
1
4
4、请简述用户空间的内存分配及各空间保存的数据类型:
答案:
(1) 用户空间供为3G,分为:栈空间,堆空间,数据区,代码段。
总结
今天的分享就到这里了,希望对你有帮助,上面如有错误可以在下方留言交流或者私聊作者都可以。