嵌入式面试题(1)

一、选择

  1. 凡在函数中未指明存储类型的变量,其隐含的存储类别为:auto
  2. 如下对static的描述,错误的是:

A. static修饰全局变量时,存储空间可能发生变化
B. static修饰全局变量时,作用域发生变化
C. static修饰局部变量时,作用域不会发生变化
D. static修饰局部变量时,存储空间发生变化

  1. 已知当前intel X86处理器属于小端字节序,在该平台上有一段代码如下:
unsigned short ausSrc[2] = {255, 254};
unsigned char aucDest[sizeof(ausSrc)];
memcpy(aucDest, ausSrc, sizeof(ausSrc));

已知sizeof(unsigned short) = 2,则aucDest[0]、aucDest[1]、aucDest[2]、aucDest[3]的数值是:255 0 254 0

  1. 对如下程序的正确评论为:D
void main(){
    int a;
    while(a=1) printf("%d\n", a++);
}

A. 变量A没有初始化,取得1的概率极低,所以printf语句通常不会被执行
B. while语句只被执行一次
C. 程序输出2
D. 程序为死循环

  1. 以下程序执行后的sum值是:15
void main() {
    int i, sum;
    for(i=0; i<6; i++) {
        sum += i;
    }
    printf("%d\n", sum);
}
  1. 有如下宏定义
#define MULTI(A, B) A*B

执行unsigned int ulRet = MULTI(1+3, 6),则ulRet = 19

  1. 下面程序输出:6 -6 0 1
int main () {
	int a=5, b=-7, c=0, d;
	d = ++a && ++b || ++c;
	printf("%d %d %d %d\n", a, b, c, d);
	return 0;
}

&&的优先级高于||,所以原式等价为d =(++a && ++b) || ++c;如果&&前为假,则将不会计算后面的式子,如果||前为假,则将继续计算后面的内容。反过来也一样。

二、填空

  1. 用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数: int *a[10](int)

  2. 下列代码输出的内容为:10 10

#include <stdio.h>

int main () {
	int i=0, j=0;
	while(i<5, j<10) {
		i++;
		j++;
	}
	printf("%d %d\n", i, j);
}
  1. 计算机系统中,一般使用补码存储数据,使用16bit存储时,-5的二进制表示为:0XFD

十进制5可以用8位二进制表示为0000 0101,取反+1为补码1111 1011。

  1. UART在确定的波特率下有特定的协议,比如:

三、简答

  1. 请说明C语言的堆、栈、全局数据区的特性和他们各自存放哪些种类的变量。

答:

c中的几个存储区:

  1. 栈由编译器自动分配释放。在函数体中定义的变量通常是在栈上。
  2. 堆一般由程序员分配,若程序员不释放,程序结束时可能由操作系统自动回收。用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。
  3. 全局数据区的全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束释放。在所有函数体外定义的是全局量,加了static修饰符后不管在哪里都存放在全局区(静态区)
  4. 还有一个专门放常量的地方,程序结束释放。函数中的 “adgfdf “这样的字符串存放在常量区。
  1. 试简述常见并行处理器技术及其特点。

答:并行处理器指可以一次可处理多个运算的处理器。但其本质上还是串行处理器的组合,所以提起并行处理器,一般指经特殊设计的多线程处理器。

流水处理这可以大大提高处理速度,是并行系统必须具有的特点之一。

四、编程

如下C函数用来删除一个单向链表中的所有节点,请实现其功能:

struct Node {
    struct Node *next;
    int i;
}

int delete_all(struct Node *head) {
	struct Node p, q;
	p = head->next;
	while(p != 0) {
		q = p->next;
		free(p);
		p = q;
	}
	head->next == NULL;
	return 0;
}
posted @ 2020-04-19 00:09  hansenn  阅读(347)  评论(0编辑  收藏  举报