华为嵌入式软件面试精华:预编译与指针深度解析

5星 · 超过95%的资源 需积分: 50 136 下载量 172 浏览量 更新于2024-07-18 7 收藏 561KB PDF 举报
本文档主要聚焦于华为嵌入式软件工程师面试中的常见问题,涉及的关键知识点包括预编译技术的应用、指针类型的区分以及内存管理和字符数组与常量指针的比较。以下是详细的内容解读: 1. **预编译与编译选项**: - 预编译是一种编译优化技术,用于处理在程序正式编译之前不会改变的大量代码或共享数据。当一个程序由多个模块组成,并且这些模块都依赖于一组标准的包含文件和相同的编译选项时,预编译头(precompiled headers)就显得尤为重要。预编译指令允许编译器在编译过程中提前执行某些操作,从而提高编译效率。 2. **指针类型的区别**: - `char*const p` 是常量指针,它指针本身不可变,但可以指向的内存是可以修改的。 - `const char* p` 和 `const char* const p` 都是常量字符指针,区别在于前者只是字符不可变,指针本身还是可变的;后者则是指针指向的字符和指针本身都不可变。 - 示例代码展示了不同类型的指针在比较时的特性,如 `str1` 和 `str2` 虽然内容相同,但由于一个是数组,一个是常量指针,所以相等性检查结果为0(false)。 3. **数组和常量指针的内存分析**: - 数组 `str1` 和 `str2` 以及 `str3` 和 `str4` 分别表示不同的内存区域,尽管内容相同,但由于是动态分配的空间,它们是不同的对象。 - `str5`, `str6`, `str7`, 和 `str8` 是指针,它们指向的是字符串字面量常量区,因此 `str5 == str6` 和 `str5 == str7` 返回 true,因为它们指向同一个内存地址。 4. **sizeof运算符的问题**: - 在 `toUpperCase` 函数中,`for` 循环的条件判断中,`sizeof(str)` 应该除以 `sizeof(str[0])` 来计算数组元素的数量,而不是整个数组的大小。这是因为在C/C++中,`sizeof(str)` 返回的是数组整体的大小,而 `sizeof(str[0])` 返回的是单个元素的大小。 - 另外,在计算 `str` 字符串的长度时,同样需要使用 `sizeof(str)/sizeof(str[0])`,这表明原代码中可能存在的第二个错误。 华为嵌入式软件工程师面试中会关注基础的编程概念、编译原理、指针操作的理解以及对内存管理的细致考虑。求职者在准备这类面试时,不仅要深入理解理论知识,还要能灵活运用到实际编程场景中。