嵌入式软件开发面试重点:预编译与指针详解
版权申诉
185 浏览量
更新于2024-08-22
收藏 30KB DOCX 举报
"嵌入式软件开发面试题集锦"
在嵌入式软件开发领域,面试时常会涉及一些基础但重要的编程概念和技术。以下是一些关键知识点:
1. **预编译**:
预编译是编译过程的一部分,主要处理#include指令,将宏替换为实际内容,并处理条件编译指令。当代码包含大量不变的头文件,或者多个源文件共享相同的编译选项时,预编译可以帮助减少编译时间。预编译的.h文件通常会被保存为.pch文件,供后续编译使用。
2. **指针与常量**:
- `char* const p`:表示`p`是一个常量指针,即`p`的值不能改变,但它指向的`char`型数据可以修改。
- `char const *p`:表示`p`是一个指向常量的指针,即`p`可以改变,但`p`所指的`char`型数据不能修改。
- `const char *p`:与`char const *p`相同,表示`p`是一个指向常量的指针。
3. **数组与指针**:
- 数组名如`str1`等代表了数组的首地址,它们在内存中占据连续的空间。而`str5`等指针变量仅存储地址,可以指向同一内存区域的不同位置。
- `sizeof`运算符在函数内部无法检测动态分配数组或外部数组的大小,只能得到静态数组的大小。
- 指针的位数取决于地址总线的位数,例如在80386之后的系统中,指针通常是32位,即4个字节。64位系统中的指针也是32位,但请注意,这指的是在32位模式下运行的情况,64位模式下指针是64位。
4. **指针运算**:
- `*(a+1)`等同于`a[1]`,`*(ptr-1)`等于`a[4]`。指针加减操作会根据指针类型移动相应的字节数。
- `&a`是数组的地址,`a+1`是数组第二个元素的地址,`&a+1`则移动到下一个相同大小的对象地址。
5. **函数内的sizeof问题**:
函数内通过`sizeof`计算动态分配数组或外部数组的大小会失败,因为这些数组在栈上不存在,`sizeof`只能计算静态数组。
6. **宏定义**:
宏定义如`#define Min(X,Y)`用于创建简单的条件表达式,但要注意宏定义没有语句结束的分号,所以在使用时需要自行添加。
7. **字符串与常量**:
- `char *s="AAA"`定义了一个指向常量字符数组的指针,试图修改`s[0]`会导致未定义行为,因为字符串字面量是不可修改的。
以上知识点是嵌入式软件开发面试中常见的主题,理解和掌握这些基础知识对于面试和实际工作至关重要。
2021-09-14 上传
2021-03-14 上传
2021-09-14 上传
2021-09-14 上传
2021-08-13 上传
2021-09-14 上传
2021-09-14 上传
2021-09-14 上传
2021-09-14 上传
进击的朱亚文
- 粉丝: 2
- 资源: 4万+
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章