嵌入式开发er的C语言能力自测(面试)题---top 16

准备面试刷到的,链接里是原文和答案: (a-c-test-the-0x10-best-questions-for-would-be-embedded-programmers)

这里我先只给出问题,可以作为能力自测,然后再去原文看答案。

 

1. 使用#define,定义一个明示变量(原文为manifest constant,“简单的宏主要用来定义那些被Kernighan和Ritchie称为“明示常量”(manifest constant)的东西。”)来表示一年中有多少秒,不考虑闰年。

 

2. 写出标准的MIN宏。也就是说,这个宏接收两个变量参数且返回其中较小的一个。

 

3. 预处理指令#error的用途?

 

4. 无限循环经常出现在嵌入式系统中。在c中如何实现无限循环?

 

5. 使用一个变量a, 写出下面定义的表达式。

(a)一个整数

(b)一个指向整数的指针

(c)一个指针指向一个整数指针

(d)一个拥有十个整数的数组

(e)一个拥有十个整数指针的数组

(f)一个指针指向有十个整数的数组

(g)一个函数指针:该函数有一个整数参数且返回一个整数

(h)一个有十个函数指针的数组: 该函数有一个整数参数且返回一个整数

 

6. static关键字的用法(3种)

 

7. const关键字是什么意思?

 下列表达式(不完整)是什么意思?

1 const int a;
2 
3 int const a;
4 
5 const int *a;
6 
7 int * const a;
8 
9 int const * a const;

 

8. 关键字volatile是什么意思?给出他的三种不同用法。

(a)一个参数可以同时被定义为const和volatile嘛?解释下为什么。

(b)一个指针能被定义成volatile吗?解释下为什么。

(c)下面的函数有什么问题?

1 int square(volatile int *ptr) {
2 
3   return *ptr * *ptr;
4 
5 }

 

9. 嵌入式系统总是会要求使用者对变量或者寄存器进行位操作。给定一个整数变量a, 给出两部分代码。第一个置位a的第三比特。第二个清除a的第三比特。两种情况下,其他比特不能被改变。

 

10. 嵌入式系统经常需要编程人员访问内存的特定位置。在一个项目中,要求设置一个位于内存地址0x67a9的整数变量的值设为0xaa55。编译器为纯ANSI编译器。写出代码完成这个任务。

 

11. 中断是嵌入式系统中非常重要的部分。所以很多编译器厂商提供了标准c的扩展来支持中断。通常,这个新的关键字为“__interrupt”。下面的代码使用“__interrupt”定义了一个中断服务程序。给出你的评论。

1 __interrupt double compute_area(double radius) {
2 
3   double area = PI * radius * radius;
4 
5   printf("nArea = %f", area);
6 
7   return area;
8 
9 }

 

12. 下面程序的输出是什么?为什么?

1 void foo(void) {
2 
3     unsigned int a = 6;
4 
5     int b = -20;
6 
7     (a + b > 6) ? puts("> 6") : puts("<= 6");
8 
9 }

 

13.对于下面的代码你有什么评论?

1 unsigned int zero = 0;
2 
3 unsigned int compzero = 0xffff;  /*1's complement of zero */

 

 

14. 即使不是很常见,但是有些嵌入式系统会从堆(heap)动态申请内存。在嵌入式系统中动态申请内存有什么问题?

下面的代码会输出什么?为什么?

 1 char *ptr;
 2 
 3 if ((ptr = (char *)malloc(0)) == NULL) {
 4     puts(“Got a null pointer”);
 5 
 6 }
 7 
 8 else {
 9     puts(“Got a valid pointer”);
10 
11 }

 

15.

1 #define dPS  struct s *
2 
3 typedef struct s * tPS;

 

哪一种方法你更偏爱?为什么?

 

16. 下面的代码合法吗?如果合法代码执行了什么?

1 int a = 5, b = 7, c;
2 
3 c = a+++b;

 

上一篇:std::move使用实例


下一篇:单例模式懒汉模式,饿汉模式