1、描述一下gcc编译过程?

gcc编译过程分为4步骤:预处理、编译、汇编、链接。

  • 预处理:头文件包含、宏替换、条件编译、删除注释。
  • 编译:主要进行词法、语法、语义分析等等,检查无误后把预处理好的文件编译成汇编文件。
  • 汇编:汇编文件转换为二进制目标文件。
  • 链接:把项目中的各个二进制文件 + 所需的库 + 启动代码链接为可执行文件。

2、内存最小存储单位以及内存的最小计量单位分别是?

内存的最小存储单位是二进制位,内存的最小计量单位:字节

3、#include<> 和#include""差异?

include<>到系统指定目录寻找头文件,#include ""先到项目所在目录寻找头文件,如果没有找再到系 统指定的目录下寻找。

4、描述一下变量的命名规则?

变量名可以由字母、数值、下划线构成,但不能直接以数值开头。

5、变量的声明和定义?

声明变量不需要建立存储空间,变量的定义需要建立一个存储空间。

6、谈谈C语言的有符号和无符号的差异?

  • 有符号:数据的最高位表示符号位,0代表正数,1代表着负数。
  • 无符号:数据的最高位不是符号位,而是数据整体的一部分。

7、谈谈计算机补码意义?

  • 统一了0的编码。
  • 把符号位和其他位统一处理。
  • 把减法运算转换为加法运算

8、谈谈数组特征?

同一个数组的成员都是相同的数据类型,同时所有的成员在内存中的地址也都是连续的。

注意:数组是存放在连续内存空间上的相同类型数据的集合。

  • 数组下标都是从0开始。
  • 数组内存空间地址都是连续。

9、数组分类

  • 静态数组:类似int arr[5];在程序运行就确定了数组的大小,运行过程无法改变数组的大小。
  • 动态数组:主要是在堆区申请的内存空间,数组的大小还是在程序运行中确定的,可以更改数组的大小。

10、描述一维数组的不初始化、部分初始化、完全初始化的不同特点?

  • 不初始化:若是一个局部数组,则数组元素内容随机,若是全局数组,则数组元素内容为0.
  • 部分初始化:没有初始化的部分自动补零。
  • 完全初始化:若一个数组全部初始化,则省略元素个数的数组大小由初始化的个数确定。

11、谈谈数组名作为类型、作为地址、对数组名取地址的区别?

  • 数组名作为类型:代表着整个数组的大小。
  • 数组名作为地址:代表着数组首元素的地址。
  • 数组名取地址:代表数组的首地址。

12、谈谈你对二维数组在物理上以及逻辑上的数组维度理解?

二维数组逻辑上是二维的,物理上是一维的。

13、描述一下函数定义和函数声明的差异?

  • 函数定义:对函数功能确定、指定函数名称,函数类型,形参及其类型,函数体等等,都是一个完整的,独立的函数单位。
  • 函数声明:函数名字、函数类型和形参个数、类型和顺序告知编译器,便于在包含函数调用的语句进行编译时,据此对其进行对照验证检查。

14、描述一下指针和指针变量的差异?

指针:内存中的每一个字节都会分配一个32位或者64位的编号,这个编号就是地址,而指针就是内存单元的编号。
指针变量:本质就是变量,只是该变量存放的是空间的地址编号。

15、描述一下32位或者64位平台下的指针大小

  • 32位平台:任意类型的指针大小是4字节。
  • 64位平台:任意类型的指针大小都是8字节。

16、描述一下指针数组概念?

指针数组本质就是数组,只不过数组的每一个元素存储的都是一个指针(地址)

17、描述一下普通局部变量、普通全局变量、静态局部变量、静态全局变量的差异?

  • 普通局部变量:存放在栈区,若不初始化内容则随机值,只会在定义的语句块内有效,语句块结束之后变量空间就会被释放掉弹出。
  • 普通全局变量:存放在内存全局区,若不初始化内容则默认0,进程结束空间才会被释放,能够被当前源文件或者其他文件使用;

注意:其他文件调用该全局变量,需要使用extern修饰。

  • 静态局部变量:存放在全局区,不被初始化内容则默认0,整个进程结束空间才会被释放,只能够在定义的语句块内有效。
  • 静态全局变量:存放在内存全局区,不初始化则默认0,整个进程结束空间会被释放,只能够被当前源文件使用。

18、描述一下内存分区?

  • 程序运行之前:分为代码区、BSS段(未初始化数据区)、data段(初始化数据区)。
  • 程序运行之后:栈、堆、全局区(静态区)、文字常量区、代码区。

19、使用realloc给已分配的堆区空间追加空间时需要注意什么?

注意:需要使用指针变量保存realloc的返回值。

20、谈谈文件的分类?

  • 二进制文件基于数值编码,需要根据具体应用解析。
  • 文本文件基于字符集编码,一个字节一个意思,可以直接通过记事本打开。

21、文件缓冲区刷新有几种刷新模式?

行刷新、满刷新、强制刷新、关闭刷新。

22、如何理解结构体的深拷贝和浅拷贝?

若结构体有指针成员的时候容易出现该问题。

浅拷贝:两个结构体变量的指针成员指向了同一个堆区空间,在各个结构体变量释放的时候会出现多次释放同一段堆区空间的情况。

深拷贝:让两个结构体变量的指针成员分别指向了不同的堆区空间,只是空间内容拷贝一份,这样在各个结构体变量释放的时候就不会出现多次释放同一段堆区空间的问题。

23、描述一下结构体对齐规则?

  1. 结构体成员对齐规则。第一个结构体成员应该放在offffset(偏移量)为0的地方,以后每个数组成员应该放在offffset 为min(当前成员的大小,#pargama pack(n))整数倍的地方开始(比如int在32位机器为4字节,#pargama pack(2),那么从2的倍数地方开始存储)。

  2. 结构体总的大小,也就是sizeof的结果,必须是min(结构体内部最大成员,#pargama pack(n))的整数倍,不足要补⻬。

  3. 结构体做为成员的对齐规则。如果一个结构体B里嵌套另⼀个结构体A,还是以最大成员类型的大小对齐,但是结构体A的起点为A内部最大成员的整数倍的地方。(struct B里存有struct A,A里有char,int,double等成员,那A应该从8的整数倍开始存储。),结构体A中的成员的对齐规则仍满足原则1、原则2。

嵌入式C语言——常见面试题相关推荐

  1. 嵌入式岗位Makefile常见面试题(1)

    第一题:变量使用 解析:Makefile中变量的引用格式就是$(变量名),这是没什么好讲的,记住就行.在Makefile中有一些特殊的宏定义需要记住,$@:表示生成的目标 :$<:表示生成依赖的 ...

  2. linux c语言常见面试题及答案,Linux下C语言的几道经典面试题小结(分享)

    Linux下C语言的几道经典面试题小结(分享) 本篇文章整理了几道Linux下C语言的经典面试题,相信对大家更好的理解Linux下的C语言会有很大的帮助,欢迎大家探讨指正. 1.如果在Linux下使用 ...

  3. 计算机考研复试C语言常见面试题

    本文是我2021年考研时准备的复试面试题,现在拿出来给大家分享一下 觉得好的点个赞哦,毕竟当初我也是整理了好久,改了好几次版本呢 祝大家都上岸!!!! P.S. 我当初整理的时候是word,直接复制过 ...

  4. 程序设计语言常见面试题

    本意用于考研复试,以下是博主自己整理,博主是大四本科生,不能保证内容完全正确,请辩证地看,如果有问题可以在评论区指出我再修改. 整理不易,我就不挂个二维码请游客付费了,如果可以的话,麻烦高抬贵手,点一 ...

  5. Spring常见面试题及答案汇总1000道(春招+秋招+社招)

    Spring面试题以及答案整理[最新版]Spring高级面试题大全(2021版),发现网上很多Spring面试题都没有答案,所以花了很长时间搜集,本套Spring面试题大全,汇总了大量经典的Sprin ...

  6. 2021年最新Spring面试题,常见面试题及答案汇总

    Spring面试题以及答案整理[最新版]Spring高级面试题大全(2021版),发现网上很多Spring面试题都没有答案,所以花了很长时间搜集,本套Spring面试题大全,汇总了大量经典的Sprin ...

  7. Java多线程常见面试题及答案汇总1000道(春招+秋招+社招)

    Java多线程面试题以及答案整理[最新版]Java多线程高级面试题大全(2021版),发现网上很多Java多线程面试题都没有答案,所以花了很长时间搜集,本套Java多线程面试题大全,汇总了大量经典的J ...

  8. MySQL常见面试题及答案汇总1000道(春招+秋招+社招)

    MySQL面试题以及答案整理[最新版]MySQL高级面试题大全(2021版),发现网上很多MySQL面试题都没有答案,所以花了很长时间搜集,本套MySQL面试题大全,汇总了大量经典的MySQL程序员面 ...

  9. Jvm常见面试题及答案汇总1000道(春招+秋招+社招)

    Jvm面试题以及答案整理[最新版]Jvm高级面试题大全(2021版),发现网上很多Jvm面试题都没有答案,所以花了很长时间搜集,本套Jvm面试题大全,汇总了大量经典的Jvm程序员面试题以及答案,包含J ...

最新文章

  1. 每年节省170万美元的文档预览费用,借助机器学习的DropBox有多强​?
  2. 从CSDN的趣味题学PYTHON
  3. 清华唐杰团队:一文看懂NLP预训练模型前世今生
  4. Spring Boot中使用时序数据库InfluxDB
  5. 【Android 插件化】Hook 插件化框架 ( hook 插件化原理 | 插件包管理 )
  6. 4.9.5 通用注释
  7. [转载] Java Challengers#1:JVM中的方法重载
  8. 光敏电阻控制led亮度程序_Arduino动手做(2)光敏电阻模块
  9. 用wxpython编写登录界面_wxpython+pymysql实现用户登陆功能
  10. Android系统 miui主题6,miui主题工具-miui主题工具最新版v2.6.2 安卓版_永辉资源网
  11. Linux快捷键笔记
  12. List转Map的三种方法
  13. C#编写IE插件的一些经验
  14. 跟华为云一起,做未来城市的解谜人
  15. 基于Proteus学习单片机系列(五)——定时器实现电子表
  16. marvin java_Java开源图像处理框架Marvin介绍
  17. Lammps模拟剪切作用下的位错滑移
  18. 手机隐藏ip地址的方法简单设置
  19. 诺基亚衰落的原因及其如何走去困境
  20. 2016计算机考研经验,2016大连理工大学计算机考研经验(示例代码)

热门文章

  1. 【转载】UE4 Epic Games工程师分享:如何在移动平台上做UE4的UI优化?
  2. CEPS初访及追访数据
  3. Robot Techology
  4. CSharpGL(44)用ShadowMapping方式画物体的影子
  5. 【洛谷4168】[Violet]蒲公英
  6. 一个可以重复遍历的RowSet
  7. 对在线教育的理解与思考
  8. Cocos Creator 资源管理AssetManager
  9. IntelliJ IDEA 常见图标
  10. 华为云计算HCIA(二)-存储