华为嵌入式软件面试真题详解

需积分: 49 56 下载量 3 浏览量 更新于2024-07-19 1 收藏 544KB PDF 举报
"华为面试真题集包含了2013年至2015年华为公司对嵌入式软件工程师的面试问题,其中包含了答案。这份资料来自UTips校招平台,旨在帮助求职者准备华为公司的面试,提供关于预编译、指针类型、sizeof运算符在处理数组时的应用以及32位机器上的指针大小等相关知识点的实践题目。" 在华为的面试真题中,涉及了以下几个重要的嵌入式软件开发知识点: 1. **预编译**: 预编译是在实际编译之前进行的一个步骤,主要处理宏定义、条件编译指令等。当代码包含大量的头文件且这些文件不经常改变,或者多个模块共用相同的编译选项和头文件时,预编译可以提高编译效率,生成预编译头文件。 2. **指针类型的区别**: - `char*const p`:常量指针,指针变量p的值不可修改,但可以通过p修改它所指向的char型变量。 - `char const* p`:指向常量的指针,p指向的内容不可修改,但指针p本身可变,可以指向其他位置。 - `const char* p`:与`char const* p`相同,表示p指向的内容是常量,不能修改。 3. **sizeof运算符的使用**: sizeof运算符可以用来获取变量或数据类型的大小。在函数外部,对于静态数组,sizeof能正确返回数组的总字节数。但在函数内部,如果传递的是数组的首地址(例如,`char str[]`),sizeof会返回指针的大小,因为此时数组信息丢失,仅剩指针本身。因此,在函数UpperCase中,sizeof(str)将返回指针的大小,而非字符串的实际长度。 4. **32位机器的指针大小**: 在32位系统中,数据总线宽度为32位,这意味着地址总线也是32位,因此一个指针占用4个字节,即32位。 5. **数组和指针操作**: 代码中的`inta[5]`定义了一个整型数组,`*(a+1)`访问数组第二个元素,即`a[1]`,值为2。`int*ptr=(int*)(&a+1)`创建了一个指针,它指向`a`数组之后的位置,即下一个内存单元。`*(ptr-1)`访问的是`ptr`指针前一个位置的元素,即`a[4]`,在给定的数组中,这将导致越界访问,因为在C/C++中,数组下标从0开始,所以`a[5]`是无效的。不过,由于题目没有提供完整的运行环境,我们无法确定实际输出,但可以推测可能会输出数组的最后一个元素,即5。 这些面试问题涵盖了C/C++编程基础、指针操作和数组理解,这些都是嵌入式软件工程师需要掌握的核心技能。准备面试时,不仅要理解这些概念,还需要熟悉如何在实际编程场景中应用它们。