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

需积分: 3 4 下载量 61 浏览量 更新于2024-09-18 收藏 20KB DOCX 举报
"华为笔试题包含判断题、填空题和编程题,主要考察C语言基础知识,如数组、指针、运算符优先级、内存管理和函数参数传递等。" 在华为的笔试中,题目涵盖了C语言的基础和进阶概念,以下是这些知识点的详细解释: 1. **数组与指针**: - 在数组定义inta[2][2]={{1},{2,3}}中,a[0][1]的值实际上是3,因为数组的初始化方式使得a[0][1]接续a[0][0]后面的值,即2之后是3,所以原题判断错误。 - int(*ptr)()表示ptr是一个指向函数的指针,而不是一维数组的名字。 2. **指针运算**: - 指针可以进行比较运算(>,<,>=,<=,==),但不能直接进行算术运算,如加减法,除非它们指向同一个数组的元素或相邻元素。 3. **switch语句**: - switch语句中的c可以是整型(int)、长整型(long)、字符型(char)和无符号整型(unsigned int),但不包括浮点型(float)。 4. **宏定义**: - #defineprint(x)printf("the number, %d, is", x) 这个宏定义用于将数字x打印出来,注意宏替换不进行任何类型检查。 5. **大小与类型**: - sizeof运算符返回变量或类型所占用的字节数,例如:char数组str占6个字节,指针p占4个字节,字符占1个字节,整型n占4个字节。 - 当数组作为函数参数传递时,它会退化为指针,因此在函数内部sizeof(str)返回的是指针的大小,即4个字节。 6. **动态内存分配**: - voidgetmemory(char**p, int num)函数用于动态分配内存,然后通过指针p指向这块内存。在test函数中,str被初始化为NULL,调用getmemory后,str指向了大小为100的内存区域,然后复制字符串"hello"到这片内存,最后打印出"hello"。 7. **指针操作**: - 对于*(ptr++)+=123,ptr先自增,然后对当前指针位置的值加123,所以ptr和*(ptr++)的结果都是8,因为原值为8的元素增加了123变为131,但ptr已经自增了。 - a++和++a的前置和后置运算符在不同上下文中有不同效果,导致了不同的输出结果。 8. **编程题**: - 编写strcmp函数需要实现字符串比较功能,不使用库函数strcmp。这个函数需要逐字符比较直到遇到'\0'或者找到不匹配的字符,返回相应的比较结果。 以上就是华为笔试题中涉及的关键知识点,这些题目旨在测试考生对C语言基础的掌握程度,包括指针操作、数组、内存管理、运算符优先级、函数参数传递以及基本的数据类型理解。