嵌入式工程师入门C程序与单片机基础测试

需积分: 9 3 下载量 96 浏览量 更新于2024-09-17 收藏 69KB DOC 举报
"嵌入式工程师初试试题,主要涵盖了C程序设计和单片机基础两方面的内容,涉及了预编译、编译、汇编、链接等程序开发流程,以及C语言的数据类型、数组、指针、运算符、存储类别、常量表示和程序执行等方面的知识。此外,试题还提及了16进制整型常数、函数返回值类型、地址操作、宏定义及数据存储格式在ASCII和二进制模式下的差异。" 详细说明: 1. C语言处理流程:C语言处理系统在生成执行文件时,通常会经历预编译、编译、汇编和链接四个阶段。预编译处理头文件中的宏定义、条件编译等;编译阶段将源代码转换为汇编代码;汇编阶段将汇编代码转化为机器语言;最后链接阶段将所有模块组合成一个可执行文件。 2. C语言常量和类型:题目中的0x1011是一个16进制整型常量,C语言中用0x开头表示十六进制数。而8进制常量以0开头,字符常量用单引号括起,2进制常量在C语言标准中不直接支持。 3. 函数返回值类型:题目中给出的函数`add(inta,longb)`返回类型为`float`,即使`c`的计算结果是`float`,但返回类型由`return`语句后的表达式决定。 4. 数组和指针:在C语言中,数组名代表数组首元素的地址,所以`a[1][0]`和`b[0][0]`都是整型变量的地址,它们相加的结果是地址的加法,不进行数值计算。因此,程序最后输出的是未定义的内存位置,可能是任何值,但题目选项中没有这个选项,所以选择D,表示不确定的结果。 5. 存储类型符:在函数内部定义变量时,默认存储类型是`auto`,可以省略。而`static`、`extern`和`register`则不能省略,因为它们分别代表静态存储、外部链接和寄存器变量。 6. 地址操作:`&`是取地址运算符,`*`是解引用运算符。在C语言中,`&*a`和`*point`都是表示变量`a`的地址,而`a`本身代表变量的值,`&a`是变量的地址。 7. 宏定义和程序执行:题目中的`#defineF(y)15>>y`定义了一个宏,表示将15右移`y`位。在`main()`函数中调用`PRINT(F(2))`,`F(2)`计算后得到3,`printf`打印出3。 8. 数据存储:在ASCII码形式存储整数时,每个数字通常占1个字节,因此10002需要5个字节。而在二进制形式下,一个32位整数占4字节,所以10002只占2字节,因为它的绝对值小于2^16。 这些知识点对于准备嵌入式工程师面试的考生来说至关重要,因为C语言是嵌入式开发的基础,而单片机基础知识和ARM架构的理解也是嵌入式工程师必备的技能。通过这样的试题,可以评估应聘者的编程能力、对计算机体系结构的理解以及对C语言特性的掌握程度。