C语言笔试题解析:比较与sizeof运算

需积分: 9 5 下载量 157 浏览量 更新于2024-07-29 收藏 300KB PDF 举报
"经典C语言笔试题" 在C语言中,笔试题目通常会涵盖语言的基础语法、数据类型、条件判断、内存管理以及预处理指令等多个方面。以下是对这些知识点的详细解释: 1. **BOOL变量与“零值”比较**: - 在C语言中,并没有内置的BOOL类型。通常,BOOL是自定义类型,如`typedef int BOOL;`,其中0表示FALSE,非0表示TRUE。正确的if语句比较应避免使用等于特定数值的条件,如`if(flag)`和`if(!flag)`。 2. **float变量与“零值”比较**: - 比较浮点数与零时,由于浮点数的精度问题,直接使用"=="或"!="可能会导致预期之外的结果。因此,应设定一个极小的误差范围,如`const float EPSILON = 0.00001;`,然后判断浮点数是否在这个范围内,如`if((x >= -EPSILON) && (x <= EPSILON))`。 3. **指针变量与“零值”比较**: - 指针的零值表示空指针,用NULL表示。正确的if语句比较指针是否为空指针应使用`if(p == NULL)`和`if(p != NULL)`,而不是直接与0比较。 4. **sizeof运算符**: - `sizeof`用于计算变量或类型的大小(以字节为单位)。在动态分配内存时特别有用。 - - 在函数`void Func(char str[100])`中,`sizeof(str)`为4,因为str是一个指针,其大小取决于系统的指针大小,通常为32位系统上的4字节。 - - 当`str`定义为字符数组`char str[] = "Hello";`,`sizeof(str)`为6,包括字符串结束符`\0`。 - - 对于指针`char *p = str;`,`sizeof(p)`依然为4,因为指针的大小不变。 - - `int n = 10;`中的`sizeof(n)`为4,因为int通常占用4字节。 - - 动态分配内存`void* p = malloc(100);`,`sizeof(p)`仍然是4,因为p仍然是一个指针,其大小与分配的内存无关。 5. **简答题**: - **ifndef/define/endif**:这是C预处理器指令,用于防止头文件被多次包含。`ifndef`检查宏是否已被定义,如果没有则定义并继续执行;`define`定义宏;`endif`结束条件编译块。这样可以避免重复定义导致的问题。 - **#include<filename.h> vs #include“filename.h”**:前者是系统库头文件的引用,编译器从标准库路径开始搜索;后者是用户自定义头文件,编译器从当前工作目录开始搜索。 - **const的用途**: - `(1)` 定义常量,如`const int a = 10;`,一旦赋值后不能改变。 - `(2)` 修饰函数参数,如`void func(const char* str)`,防止函数内部修改传入的字符串。 - `(3)` 修饰函数返回值,表明返回值不会被函数修改,如`const int getSomeValue()`。 - `(4)` 修饰类的成员变量,确保对象创建后成员变量的值不能被外部代码修改。 以上是经典C语言笔试题中涉及的关键知识点的详细解析,它们对于理解和掌握C语言编程至关重要。