华为软件笔试题解析:判断、填空与编程挑战

4星 · 超过85%的资源 需积分: 0 7 下载量 50 浏览量 更新于2024-07-28 收藏 201KB DOC 举报
"华为软件工程师笔试题" 华为软件工程师的笔试题目涵盖了C/C++语言的基础知识,包括数组、指针、运算符、数据类型、预处理指令以及字符串处理等多个方面。以下是对这些知识点的详细解释: 1. **数组与初始化**: 在C/C++中,数组初始化可以有不同的形式。题目中的`inta[2][2]={{1},{2,3}};`创建了一个2x2的二维数组。这里,`a[0][1]`的值为3,而不是0,因为数组元素按照顺序填充。 2. **指针与一维数组**: `int(*ptr)()`定义的是一个指向函数的指针,而非一维数组的名字。如果要声明一个一维数组的指针,应写作`int *ptr`。 3. **指针运算**: 指针在适当条件下可以进行比较运算,如>`<`,`>=`,`<=`, `==`。但需要注意,不同类型的指针之间的比较通常没有意义,除非它们指向同一数组或同一对象。 4. **switch语句**: 在C/C++中,`switch`语句的`case`标签可以是整型、字符型(`char`)、枚举类型(`enum`)或者无符号整型(`unsigned int`),但不包括`float`类型。 5. **宏定义**: 题目中的`#define print(x) printf("the no, "%d", is", x)`是一个宏定义,用于格式化输出整数。 6. **大小计算**: - `sizeof(str)`返回数组`str`所占内存大小,对于字符串常量,它通常等于字符串长度加1(用于存储结束符'\0'),因此为6。 - `sizeof(p)`返回指针`p`的大小,通常为4字节(在32位系统中)。 - `sizeof(n)`返回`n`的大小,`int`类型通常是4字节。 - 函数参数传递时,`sizeof(str)`在函数内部只表示指针的大小,所以也是4字节。 7. **动态内存分配**: `setmemory`函数分配内存后,`test`函数中的`str`被赋值为指向动态内存的指针,然后`strcpy`拷贝字符串"hello",最后`printf`打印字符串内容。 8. **指针操作**: `(ptr++)+=123;`这条语句先自增`ptr`,然后将其值增加123。由于自增操作发生在前面,`ptr`的初始值是数组`arr`的第一个元素的地址,因此`*ptr`和`*(++ptr)`都是8,但实际代码中这样使用会改变指针值,可能导致意外行为。 9. **编程题**: - `strcmp`函数要求编写一个不依赖库函数的字符串比较函数,当两个字符串相等时返回0,不等时返回-1。 - `fun`函数用来判断字符串是否为回文,回文是指正读反读都一样的字符串,返回1表示是回文,0表示不是,-1表示出错。 **预编译**: 预编译是在正式编译之前处理源代码的过程,主要任务是替换宏定义、处理条件编译指令(如`#if`, `#ifdef`, `#ifndef`等)以及包含文件。预编译适用于: 1. 当大型代码体不经常改动时,预编译可以提高编译效率。 2. 多个模块共享相同包含文件和编译选项时,预编译头文件可以减少重复工作。 **常量指针的区别**: - `char*const p`:指针`p`是常量,意味着不能更改`p`指向的地址,但可以修改`p`所指向的字符。 - `char const* p`:这是相同的,也表示`p`指向的内容是常量,不能通过`p`修改。 - `const char* const p`:指针`p`和它所指向的内容都是常量,既不能改变`p`的地址,也不能修改`p`指向的字符。 以上就是华为软件工程师笔试题中涉及的主要知识点及其详解。对于准备面试或笔试的软件工程师来说,掌握这些基础概念和编程技能至关重要。