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

相关推荐

昨天 13:14
已编辑
门头沟学院 销售工程师
我一直不知道,父母是不是真的对我满意。我和他们想象中的孩子一样吗?我满足了他们的期待吗?我不知道。学生时代就意识到我永远达不到别人那样的高度,也没有什么天赋,进入职场后和一些各种意义上的top交流后更有体会:我只是个低精力普通人,有点纠结,有点内耗,更多愚蠢,仅此而已。小时候,我总隐隐担心自己会被丢掉。担心父母想要一个“更好的孩子”,就像更好的车、更大的房子、更新的衣服、更拿得出手的骄傲。好在过程曲折但最终拿了不错的offer,算下来运气好的话,年薪勉勉强强还能和爸爸追平。但是我太累了,一个人在北京又太寂寞了,我甚至腾不出时间和爸妈打电话,偶尔妈妈笑着说这孩子怎么不回消息不理人,我实在绷不住了跟她抱怨了一番。而我妈只是叹着气说:“你也很可怜呢。”(抛开他们住着200平大房子而我住着十几平的合租房这件事确实很可怜这个客观事实)很奇怪,“可怜”这个词,反而诡异地安慰了我。在他们眼里,我不是一个必须达标、必须优秀的任务。我所有的笨拙、遗憾、不完美,比起让人失望,他们先感到的,是心疼,是想安抚,是想保护。前几天,我随口跟妈妈说:下周要飞外地出差。她淡淡地接了一句:我下周也要出差。那一瞬间我卡了一下,所以即使相隔很远,我们也能意外同频。原来我们早已在各自的人生里,独自奔波、独自赶路,像两条并行的轨迹,忙碌、疲惫,却又在不经意间,刚好同频。地球45亿年,也就出了那么一个荷马、一个达芬奇、一个爱因斯坦,一个大水母。绝大多数都是我这种普通人。再说了,天才就一定幸福吗?亚里士多德活着被弟子质疑,死后理论被乱改,甚至还有概率被性转成大胸傲娇白毛美少女,塞进 galgame 里被人攻略。你根本不知道一百年后,你的努力、理想、笑容会被解读成什么鬼样子。所以看看你的现在吧,你身体康健,精神强大,没准能活一百年,现代医学发展飞速,或许你能在这人世度过两百年也说不定。你在被人爱着,在被人看见,有mentor倾尽天下风情万种向你伸出手,有同事抱着电脑来找你改东西。你先快乐,亲爱的,快乐然后平静,平静下来,你才能看清你想要的东西,和生活的意义。
牛友故事会
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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