嵌入式八股 - 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:17 北京

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务