嵌入式面试八股文

C语言

1、const

主要用于定义常量,起到强制保护的作用,确保不会被意外修改。

有以下三个用法:

(1)修饰常量

(2)修饰形参

(3)修饰类型成员函数

2、static

主要用于以下三种:

(1)静态局部变量-生周期延长到程序结束。

(2)静态全局变量-限制作用域在本文件。

(3)静态函数-限制作用域为本文。

局部变量存放到哪里:.bss(未初始化)/.data(已初始化)。

3、volatile

主要用于:告诉编译器此变量有可能会意外被修改,不要优化对它的读写。

在嵌入式中常用于:

(1)硬件寄存器。

(2)中断服务程序修改的全局变量。

(3)多线程/RTOS共享的变量。

(4)DMA传输的缓冲区。

4、指针

指针是一个变量,它存储的值是另一个变量的内存地址

5、函数指针

函数指针就是存储函数的入口地址,通过它可以间接调用函数。也就是说:是一个指针,指向函数的地址。

在嵌入式常用于:回调函数,状态机、函数跳转表

1
2
3
4
5
//定义一个函数
int add(int a,int b) {return a + b;}
//声明函数指针变量
int (*fun)(int,int);
fun=add;

6、指针函数

指针函数就是它是一个函数,函数的返回值是一个地址。

1
2
3
4
5
6
7
8
9
10
//定义一个函数,返回值为指针
int *fun(int a,int b){
static int result;
result = a + b;
return &result;
}
//调用后得到的是地址
int *p = fun(2,3);
//取值
print("%d\n",*p);

7、指针数组

指针数组就是由指针组成的数组。

1
2
//5个 int *指针组成的数组
int *p1[5];

8、数组指针

数组指针就是指向数组的指针

1
int (*p2)[5];

9、返回函数指针的函数

返回函数指针的函数就是返回值为函数指针的函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
//定义普通函数
int add(int a,int b){return a + b;}
//定义一个返回函数指针的函数
int (*get_fun(char op))(int,int)
{
if(op == '+') return add;
return NULL;
}
//调用得到的是函数指针
int (*fun)(int,int);
fun = get_fun('+');
//通过函数指针调用函数
printf("%d\n",fun(2,3));

10、struct 与 union

struct:所有成员各占独立内存

union:所有成员共用一块内存,大小是最大成员