C语言求职笔试精华题集:填空与问答解析

5星 · 超过95%的资源 需积分: 25 43 下载量 38 浏览量 更新于2024-09-18 1 收藏 102KB DOC 举报
在寻找C语言相关职位的求职过程中,遇到的笔试题目涵盖了C语言基础知识、数据结构以及编程规范等多个方面。以下是详细解析: 一、填空题(16分) 1. **float x与“零值”比较的if语句:** 如果要检查浮点数`x`是否等于零,可以使用`if (x == 0.0f)`。因为`float`类型的零值是`0.0f`。 2. **不能做switch()的参数类型是:** 字符串或指针到非整型。C语言中的`switch`语句只能用于整型、枚举类型或字符类型。 3. **变量存储和作用域:** - 局部变量存在于**函数栈**中,生命周期与函数相同,一般在函数调用时分配内存,结束时自动释放。 - 全局变量存在于**静态存储区**,在整个程序执行期间都存在。 - 动态申请的数据存在于**堆**,程序员手动分配和释放。 4. **`strlen(a)`结果:** `strlen(a)`返回字符串`a`中字符的数量,不包括结束符`\0`,因此结果是9(假设`a`最多包含9个字符)。 5. **变量存储类型表格:** - 对于每种存储类别,填充对应属性,如存储区、生存期和作用域等。 6. **指针类型解释:** - `int *p[3];` 是一个指向整型数组的指针,数组有3个元素。 - `int (*p)[3];` 是一个指向整型数组的指针,每个元素都是一个长度为3的数组。 - `int *p(int);` 是一个返回指向整型的指针的函数。 - `int (*p)(int);` 是一个接受一个整型参数并返回整型值的函数指针。 - `int*(*p)(int);` 是一个函数,返回一个接受整型参数并返回指向整型的指针。 - `int(*p[3])(int);` 和 `int*(*p[3])(int);` 类似,但一个是函数指针数组,另一个是函数返回指向函数指针。 7. **联合体(union)和结构体(struct)的sizeof:** `sizeof(structdata)`返回`struct data`的大小,`sizeof(max)`返回`DATE`类型的大小。由于`max`是`DATE`类型的全局变量,所以`sizeof(max)`可能是`DATE`的大小。整个表达式的结果将是这两个值之和。 二、问答题(30分) 1. **局部变量与全局变量的区别:** - 局部变量在函数内部定义,仅在该函数范围内有效。 - 全局变量在整个源文件中可见,可以在任何地方访问。 - 在包含头文件的多个.C文件中,全局变量通常不推荐定义在头文件中,防止命名冲突。 2. **静态变量的区别:** - `static`全局变量只初始化一次,且其生命周期贯穿整个程序。 - `static`局部变量只在首次进入函数时初始化,之后保持不变。 - `static`函数是内部静态,只在首次调用时编译链接,之后不会再次编译。 3. **野指针原因:** - 指针未正确初始化。 - 动态分配的内存没有正确释放,导致悬空指针。 - 越界访问数组或对象。 - 指针类型转换错误。 4. **无限循环:** `for(;1;)` 是一个无限循环,条件始终为真,导致循环无法跳出,除非通过break语句干预。它的意思是持续不断地执行循环体内的代码,直到遇到break。 5. **do...while和while...do的区别:** - `do...while`先执行一次循环体,然后判断条件,如果条件满足则继续循环,至少执行一次。 - `while...do`则是先判断条件,再执行循环体。如果条件不满足,循环体可能不会被执行。 6. **顺序存储和链表:** - 顺序存储是线性数据结构,元素连续存储,访问速度快,插入和删除效率低。 - 链表则元素分散存储,通过指针链接,插入和删除高效,但随机访问速度较慢。 这些知识点有助于求职者理解C语言基础和面试官可能关注的要点,提高笔试表现。