华为软件工程师笔试真题解析:C语言部分

需积分: 34 18 下载量 116 浏览量 更新于2024-07-31 收藏 201KB DOC 举报
"华为软件工程师试题(C部分)包含了判断题、填空题和编程题,涉及C语言的基础知识和编程技巧。试题旨在测试考生对于指针操作、数据类型、数组、内存管理以及预编译等概念的理解。" 1. **判断题解析:** - 题目1:数组定义inta[2][2]={{1},{2,3}};,a[0][1]的值为0,因为未明确初始化,所以默认为0。正确。 - 题目2:ptr是一个指向函数的指针,而非一维数组的名字。错误。 - 题目3:指针可以进行比较运算,只要它们指向相同类型的数据。正确。 - 题目4:switch语句中的c不能是float类型,因为浮点数不支持直接的case匹配。错误。 - 题目5:#define定义的宏print(x)会将"x"作为字符串处理,符合C语言宏定义规则。正确。 2. **填空题解析:** - 题目1:sizeof(str)返回字符串数组的大小,即6个字符加上终止符,所以是7;sizeof(p)返回指针的大小,通常为4;sizeof(n)返回int类型的大小,也是4;函数参数传递时,数组名str被当作指针处理,因此sizeof(str)在函数内部仍为4。 - 题目2:test函数中,先通过getmemory分配内存,然后复制字符串"hello",最后打印,输出结果为"hello"。 - 题目3:ptr++后,ptr指向arr的第二个元素,*(ptr++)+=123相当于*ptr += 123,因此ptr现在指向的元素变为18,然后*(++ptr)访问的是arr的第三个元素,没有改变,仍然是8。所以输出为8,8。 3. **编程题解析:** - 编程题1:编写strcmp函数,需要实现字符串比较,不使用库函数。当两个字符串相等时返回0,不等则返回-1。这需要逐个字符比较直到找到不同或遇到结束符。 - 编程题2:编写fun函数,判断字符串是否为回文,即正读反读都一样。需要遍历字符串,前后比较字符是否相同。 4. **其他知识点:** - **预编译**:预编译是指在正式编译之前,先处理源代码中的预处理器指令,如#define、#include等。预编译在以下情况很有用:总是使用不变的大型代码块,或者多个模块共享相同的头文件和编译选项。 - **指针常量与常量指针**: - char*const p:指针p是一个常量,它的值不能改变,但指向的字符可以修改。 - char const *p:指针p可以改变,指向的字符不可修改。 - const char *p:同上,C++中这两个声明相同,但在C中,const放在*前面表示指针本身可变,所指内容不可变。 总结,这份华为软件工程师的试题涵盖了C语言的基本语法、指针操作、数组、字符串处理、内存管理和预编译等多个方面,适合于评估应聘者的C语言基础和编程能力。