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

需积分: 9 22 下载量 74 浏览量 更新于2024-07-27 收藏 186KB DOC 举报
"华为软件工程师笔试题" 华为软件工程师的笔试题目涵盖了C/C++语言的基础知识,包括数组、指针、运算符、数据类型、预编译以及字符串处理等方面。以下是这些知识点的详细解释: 1. 判断题: - 第1题:在C/C++中,数组定义inta[2][2]={{1},{2,3}};表示第一行只有一个元素,因此a[0][1]未被初始化,其值是不确定的,不是0。所以,这道题目的答案是F,并非0。 - 第2题:int(*ptr)()声明的是一个指向函数的指针,而不是一维数组的名字。答案是F。 - 第3题:指针可以进行比较运算,但仅限于同一类型的指针。不同类型的指针之间不能直接进行比较。答案是F。 - 第4题:在C/C++中,switch语句中的表达式可以是整型、字符型或枚举类型,但不包括float。答案是F。 - 第5题:宏#defineprint(x)printf("the no,"#x", is")使用了C预处理器的字符串化操作符#,它会将参数x转换为字符串。例如,print(5)会输出"the no,5, is"。 2. 填空题: - 第1题:sizeof运算符用于计算数据类型的大小。sizeof(str)返回字符串数组的总字节数,包括结束的空字符,通常是6;sizeof(p)返回指针的大小,通常是4或8,取决于系统;sizeof(n)返回int类型的大小,通常是4。 - 第2题:`getmemory(&str,100)`分配100个字节的内存,然后`strcpy(str,"hello")`将字符串"hello"复制到str指向的内存区域。因此,运行`printf(str)`会输出"hello"。 - 第3题:`(ptr++)+=123;`首先对ptr加1,然后将123加到ptr当前指向的值上。由于ptr最初指向arr的第一个元素6,操作后ptr指向的值变为129,然后`*(++ptr)`访问下一个元素7加上123,打印结果可能是"129,130"。 3. 编程题: - 第1题:`strcmp`函数用于比较两个字符串。不使用库函数实现,可以遍历两个字符串,逐个字符比较,直到找到不同的字符或者遇到结束符'\0',返回相应结果。 - 第2题:`fun`函数用于判断字符串是否为回文。可以从前向后和从后向前同时遍历字符串,比较对应位置的字符是否相同,如果所有对应位置的字符都相同,则为回文。 其他知识点: - 预编译:预编译是在正式编译之前进行的处理过程,主要用于处理宏定义、条件编译指令等。当头文件不经常改变且被多个源文件包含时,预编译可以提高编译效率。 - char*constp, char const*p, const char*p的区别: - char*constp:指针p是常量,它的值不能改变,但指向的字符可以修改。 - char const*p:指针可以改变,但指向的字符不可修改。 - const char*p:同上,指针可以改变,但指向的字符不可修改。这是最常用的表示方式,常量字符指针。 这些题目和知识点体现了华为对软件工程师基础能力的要求,特别是对C/C++语言的理解和应用。掌握这些基本概念和技巧对于软件开发非常重要。