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

4星 · 超过85%的资源 需积分: 32 136 下载量 4 浏览量 更新于2024-07-30 2 收藏 203KB DOC 举报
"华为软件工程师面试题" 华为软件工程师面试主要考察候选人的编程能力、基础知识、问题解决能力和对计算机科学核心概念的理解。以下是从提供的面试题中提炼出的相关知识点: 一、判断题 1. 数组定义inta[2][2]={{1},{2,3}};则a[0][1]的值为0。(F) 解释:实际上,a[0][1]的值是未定义的,因为a[0]只初始化了第一个元素为1,第二个元素没有被赋值。 2. int(*ptr)(),则ptr是一维数组的名字。(F) 解释:ptr是一个函数指针,可以指向返回类型为int的无参数函数。 3. 指针在任何情况下都可进行>,<,>=,<=,==运算。(F) 解释:指针可以进行比较运算,但必须是相同类型的指针或者都是void*,且在比较前需确保它们指向的是同一类型的数据。 4. switch(c)语句中c可以是int,long,char,float,unsignedint类型。(T) 解释:C/C++语言中,switch语句中的表达式c可以是整型、字符型或枚举类型,但在实际应用中,某些编译器可能也支持浮点型,但这并不符合标准。 5. #defineprint(x)printf("the no,"#x", is") 解释:这是宏定义,使用了C语言的字符串化操作符(#),当传入一个变量时,#x会将变量名转换为字符串,如print(a)会输出"the no, a, is"。 二、填空题 1. sizeof(str) = 6, sizeof(p) = 4, sizeof(n) = 4, sizeof(str) = 4 解释:str是一个字符数组,其大小为6个字节(包括结束符'\0'),p是一个指针,占用4个字节(假设32位系统),n是一个整型,占用4个字节,函数参数传递时,str被当作指针处理,所以其大小为4个字节。 2. test函数的结果是"hello" 解释:test函数中,getmemory动态分配了100个字节的内存,并将"hello"复制到这块内存中,然后通过指针str打印。 3. printf("%d,%d", *ptr, *(++ptr)); 输出可能是"18,10" 解释:ptr指向数组的第一个元素(6),ptr++后变为指向7,*(ptr++)加123后变为18,*(++ptr)即为10。 三、编程题 1. strcmp函数实现 该函数用于比较两个字符串是否相等,不使用库函数意味着需要手动遍历字符串并逐个字符比较,直到找到不匹配的字符或者遇到'\0'。 2. 回文字符串判断 回文字符串是指正读和反读都一样的字符串,可以通过双指针从两端向中间比较,或者将字符串翻转后与原字符串比较来判断。 四、其他知识点 (1)预编译:预编译是在正式编译之前进行的,主要处理#include指令,宏定义等,减少重复编译的时间。通常在大型项目或包含大量头文件时使用预编译头文件(.pch)。 (2)char*constp, char const*p, const char*p 的区别: - char*const p:指针p本身是常量,不能改变,但p所指向的字符可以修改。 - char const* p:p可以改变指向的地址,但不能修改所指向的字符。 - const char* p:同样表示p指向的内容不可修改,与上一个的区别在于const关键字的位置,这里更强调字符常量。 以上就是从华为软件工程师面试题中提取的相关知识点,包括数组、指针、预编译、指针常量和字符串处理等方面的内容。这些知识点是软件工程师日常工作中必备的基础技能。