华为嵌入式笔试精华:基础题解析与知识点总结

4星 · 超过85%的资源 需积分: 10 14 下载量 115 浏览量 更新于2024-09-11 3 收藏 98KB PDF 举报
华为嵌入式笔试主要考察了面试者对嵌入式编程基础知识的理解和应用能力。以下是部分题目详解: 1. 表达式判断题(3分) 题目要求分析四个关于整型变量a的表达式的正确性及结果。其中,选项C `(a++)+=a;` 是错误的,因为左侧`(a++)`是一个递增操作后的新地址,而非一个有效的变量,因此不能进行赋值。正确的处理方法是将等号右边的括号去掉,即 `++a += a`。经过修正后的答案是: - (A) `a += (a++)` 的结果是 `a = 9`(初始值+1)。 - (B) `a += (++a)` 的结果是 `a = 10`(先递增再加)。 - (C) `++a += a` 的结果是 `a = 11`(先递增再加)。 - (D) `++a +=(a++)` 的结果也是 `a = 11`(两边递增然后相加)。 2. sizeof运算符练习(5分) - `sizeof(str)` 对于字符数组 `str` 的大小,考虑数组中的元素和终止符,总长度为17个字节,包括空字符。 - `sizeof(p)` 对于指针 `p`,因它是`char *`类型的,占用4个字节。 - `sizeof(n)` 对于整型变量 `n`,同样占用4个字节。 - 在 `void Foo(char str[100])` 中,`str` 作为参数传递,其大小仍为4个字节,因为它是一个指向数组的指针,而不是数组本身。 - `sizeof(p)` 在 `void *p = malloc(100)` 后,分配的是内存空间,但`p`本身依然是指针,所以仍然是4个字节。 3. 预处理器指令理解(4分) - `#ifndef`/`#define`/`#endif` 是防止头文件被多次包含的预处理指令。`ifndef`检查宏是否已定义,未定义则包含,已定义则跳过;`define`用于定义宏;`endif`关闭预处理区域。 - `#include` 包含的是编译环境提供的标准库或系统头文件,如 `<iostream>`;`#include "filename.h"` 则是包含自定义的头文件。 4. C++和C兼容性问题(6分) - `VoidGetMemory` 函数用于动态分配内存,调用后将返回一个指向内存块的指针,并赋值给传入的指针。`Test` 函数中,`str` 被初始化为 `NULL`,然后调用 `GetMemory` 分配100个字符的空间,接着将 "hello" 字符串复制到内存中并打印。因此,输出将是 "hello"。 - 第二个问题是关于内存管理和字符串复制的。`Test` 函数中,`str` 被动态分配了100个字符的空间,但在字符串结束前没有添加空字符,所以当直接使用 `printf(str)` 打印时,可能会导致未定义的行为,取决于后续代码,但通常不会输出 "100",因为没有空字符作为字符串结束标记。 通过这些题目,可以看出华为嵌入式笔试关注的点包括基本的C/C++语法、内存管理、预处理器指令的理解、数据类型限制以及函数调用的兼容性处理。准备此类笔试需要扎实的编程基础,对C/C++语言有深入的理解,并能灵活运用各种概念和技巧。