C语言笔试题目与解析

需积分: 15 36 下载量 28 浏览量 更新于2024-10-14 1 收藏 168KB PDF 举报
"C语言笔试试题包含了华为公司2005年的招聘笔试题目,主要涵盖C语言的基础知识,包括判断题、填空题和编程题。这些题目旨在测试考生对于C语言的理解和应用能力,涉及到数组、指针、运算符、数据类型、宏定义以及字符串操作等核心概念。" 在C语言中,数组、指针和函数是重要的基础知识,题目中的判断题和填空题突出了这些主题: 1. 数组定义:如`int a[2][2]={{1},{2,3}};`创建了一个二维数组,`a[0][1]`的值为2,不是0,因为数组的初始化方式决定了它。 2. 指针与数组:`int (*ptr)()`定义的是一个函数指针,而非一维数组的名字。`ptr`可以指向一个返回整型的函数。 3. 指针运算:指针可以进行`==`和`!=`比较,但一般不建议进行大小比较,因为不同类型的指针之间比较没有明确的意义。 4. 数据类型:`switch`语句的表达式不能是`float`类型,因为C语言的`switch`仅支持整型或枚举类型。 5. 宏定义:`#define`可以用来创建宏,例中`print(x)`定义了一个宏,当使用时会将`"the no," #x ", is"`字符串连接起来。 填空题主要考察了基本类型、内存分配和指针操作: 1. `sizeof`运算符:用于计算变量或类型所占的字节数。在Windows环境下,`char`数组`str`的大小是6(不包含结束符`\0`),`char*`类型的指针`p`大小为4,`int`类型的`n`也是4。在函数参数传递时,数组名被当作指向首元素的指针,因此函数内的`sizeof(str)`仍为4。 2. 动态内存分配:`setmemory`函数动态分配了100字节的内存,并将其赋值给`str`,所以`test`函数运行后,`str`指向的内存区域可以存储字符串"hello",输出结果为"hello"。 3. 指针操作:`*(ptr++)+=123;`先增加`ptr`所指的值,然后移动`ptr`到下一个位置;`*(++ptr)`先移动`ptr`,然后增加其值。由于数组`arr`的索引从0开始,`ptr`最初指向6,增加123后变为18,然后`ptr`指向7,但`*(++ptr)`并未改变7的值,故输出为`(8,8)`。 编程题通常要求实现特定功能的函数,如提供的部分代码所示,要求编写`strcmp`函数,比较两个字符串是否相等。这个函数需要逐个比较字符直到遇到不同的字符或遇到字符串结束符`\0`。如果两个字符串完全相同,则返回0;否则返回-1。注意,标准C库中已有`strcmp`函数,但在题目中要求不使用库函数实现。 这样的试题集对于准备C语言笔试的应聘者来说,是很好的练习材料,可以帮助巩固基础知识,提高问题解决能力。