嵌入式八股 - C语言 一
博主是26届校招生,接受过京东、阿里、字节、科大讯飞、正好创新、奥比中光、商汤科技、中国航信、汇川技术、CVTE、美的、格力、亿道、康冠科技、9号公司、猿辅导、中科曙光、中航光电、郑煤机、国家能源等公司的面试。获得过郑煤机、亿道、格力、CVTE、科大讯飞以及一些国企的offer。现在把所有面试遇到问题进行汇总,希望能够帮到大家!
1、C语言常用的数据类型有哪些?
C语言常用的数据类型有整型、浮点型、字符型、布尔类型等。
整型 | short、int、long、long long(默认为有符号、前面加上unsigned为无符号) |
浮点型 | float、double |
字符型 | char(默认为有符号、前面加上unsigned为无符号) |
布尔型 | bool |
2、C语言常用的数据类型所占字节数为多少?
总之就是基本上就是指针和long类型会随着系统位数而变化,其他类型几乎不变。
char | 1 | 1 |
short | 2 | 2 |
int | 4 | 4 |
long | 4 | 8 |
long long | 8 | 8 |
float | 4 | 4 |
double | 8 | 8 |
指针 | 4 | 8 |
3、堆和栈的区别和使用
1)堆
- 堆的空间比较大
- 需要手动管理进行分配和释放
- 内存地址空间是向上增长
2)栈
- 栈的空间相对较小
- 由系统自动管理(比如函数里面变量)
- 内存地址空间是向下扩展
4、new和malloc有什么区别?
首先要说明malloc是库函数,而new则是在C++中引入的关键字。
1)new
- 不需要显式的指出需要分配内存大小
- 返回相应对象类型指针,不需要手动转换
- 分配失败抛出异常,不会返回NULL
- 为对象分配内存空间时可以调用对象的构造函数
2)malloc
- 使用该功能时需要显式的指出需要分配内存大小
- 函数返回类型为void *类型,需要手动转换
- 分配失败返回NULL,需要手动判断
5、C语言中结构体对齐是什么
在C语言结构体中会按照其内占最大内存的变量类型进行对齐。
比如:
struct S1 {
char c1; // 1字节
int i; // 4字节
char c2; // 1字节
};
1 0 0 0
1 1 1 1
1 0 0 0
12字节
1 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
1 | 0 | 0 | 0 |
struct S2 {
char c1; // 1字节
char c2; // 1字节
int i; // 4字节
};
1 1 0 0
1 1 1 1
8字节
1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 |
6、const功能是什么?
const修饰常量。
在使用const修饰普通变量时,该变量为只读不能被修改。
在使用const修饰指针时,
- const int*p,表示常量指针,其指针指向内容不可以改变,但是指针可以改变指向
- int*const p,表示指针常量,其指针指向内容可以改变,但是指针不可以改变指向
我的简要记法:const int *p时,把*p看做整体,也就是指针内容,相当于const直接修饰指针内容,那么内容就是不变化的。
(C++里面的用法,后续再说)
7、变量定义如果没有初始化会有什么问题?
C 语言中变量的默认值取决于其类型和作用域。全局变量和静态变量的默认值为 0,字符型变量的默认值为 \0,指针变量的默认值为 NULL,而局部变量没有默认值,其初始值是未定义的。
8、能不能介绍下static作用?
static 主要是控制作用域和生命周期的。
- static 修饰全局变量时,其生命周期与程序一致且作用域在定义它的程序文件内,外部文件无法访问。
- static 修饰局部变量时,其存储在全局数据区(静态存储区),而非栈区。生命周期与程序一致且作用域仅限定义它的函数。注意默认初始化为 0,且仅初始化一次。
修饰全局变量 | 生命周期不变,作用域缩小到当前文件 |
修饰局部变量 | 生命周期变长了,作用域不变 |
(C++里面的用法,后续再说)
9、volatile 关键字的作用
volatile 主要是防止编译器对变量的读写操作进行优化。其主要使用场景如下:
- 访问内存映射的硬件寄存器
- 在中断服务程序中修改共享变量
- 多线程共享变量
10、结构体和联合体的区别
- 结构体每个成员拥有独立的内存空间,其总大小是所有结构体成员大小之和。
- 而联合体所有成员共享内存空间,其总大小是其最大成员大小,也就是说同一时间联合体只有一个成员有效,新成员值会覆盖就成员值。
通常情况结构体应用在实体有多种属性的场景,而联合体应用在需要进行数据共享与多种数据类型转换的场景下。
#应届生##面试##八股文##嵌入式##我的求职进度条#涉及嵌入式全方面知识。根据个人学习以及面试所得,并且加上自己见解、理解记忆方法。
查看17道真题和解析