华为嵌入式软件工程师面试题解析

需积分: 50 8 下载量 86 浏览量 更新于2024-07-20 1 收藏 106KB DOC 举报
"华为嵌入式软件工程师面试试题集锦" 在华为的嵌入式软件工程师面试中,可能会遇到各种专业问题,涵盖编程基础、语言特性、系统理解等多个方面。以下是一些关键知识点的详细解释: 1. **预编译**: 预编译是指在实际编译之前对源代码进行的处理步骤,主要目的是为了提高编译效率。当源代码中包含大量的头文件,且这些头文件内容很少变化时,预编译就显得尤为重要。预编译通常会生成预编译头文件(通常以`.gch`结尾),这样在后续编译其他使用相同头文件的模块时,编译器可以直接使用预编译好的结果,避免重复解析和处理相同的头文件。 2. **指针与常量的使用**: - `char*const p`:这是一个常量指针,意味着指针`p`的值(即它指向的地址)不可变,但所指向的`char`类型的变量可以修改。 - `char const *p`:这是指向常量的指针,表示`p`可以改变指向的地址,但新地址所指向的`char`值不能被修改。 - `const char *p`:这个和`char const *p`等价,同理,指针可以改变,但指向的`char`值不可变。 3. **字符串数组与指针比较**: 在C++中,数组名(如`str1`到`str4`)在内存中占据连续的空间,它们是不同对象,比较时会返回不同的地址,所以`(str1==str2)`等比较均返回`0`。而`str5`到`str8`都是指针,它们都指向常量字符串"abc"在内存中的同一位置,所以`(str5==str6)`和`(str7==str8)`都会返回`1`。 4. **`sizeof`运算符的使用**: `sizeof`运算符可以用来获取变量或类型占用的内存字节数。在函数外部,`sizeof(str)`对于静态定义的数组(如`str`)会返回整个数组的大小,包括结束的`\0`字符。而在函数内部,当`str`作为参数传递时,它被看作是一个指向字符的指针,因此`sizeof(str)`只会返回指针本身的大小,不会考虑它所指向的数组长度。因此,在`UpperCase`函数中,用`sizeof(str)`来计算数组长度是不正确的,因为它不能正确地获取动态数组或外部数组的大小。正确的做法是使用一个已知的数组长度或者在函数参数中传递数组的长度。 以上知识点体现了嵌入式软件工程师需要掌握的基本技能,包括对预编译的理解,指针和常量的正确使用,以及对内存管理和数组操作的深入理解。在华为的面试中,这样的题目旨在考察候选人的编程基础和对C/C++语言的熟悉程度,以及解决实际问题的能力。