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

需积分: 9 3 下载量 108 浏览量 更新于2024-07-27 收藏 300KB PDF 举报
"C语言笔试题集合,包含与‘零值’比较的if语句、C++程序中sizeof的计算及简答题,涉及头文件处理、包含方式的区别和const的用途" 在C语言中,布尔类型BOOL的正确比较通常遵循简洁的逻辑表达,避免与特定的真值(如TRUE或FALSE)进行等价比较。正确的做法是: - 如果BOOL变量flag为真,应使用`if(flag)`,如果为假,则使用`if(!flag)`。避免使用如`if(flag==TRUE)`或`if(flag==FALSE)`这样的比较,因为这不符合C语言的良好编程风格。 对于浮点数float的零值比较,由于浮点数的精度问题,不能直接使用"=="或"!="进行比较。正确的做法是设定一个极小的误差值(例如`const float EPSILON = 0.00001;`),然后比较浮点数是否在误差范围内,如`if((x >= -EPSILON) && (x <= EPSILON))`。不能使用`if(x == 0.0)`或`if(x != 0.0)`。 对于指针变量p与零值的比较,正确的写法是`if(p == NULL)`和`if(p != NULL)`。不应该直接使用`if(p == 0)`或`if(p != 0)`,因为这不符合C语言指针比较的良好实践。 在C++程序中,`sizeof`运算符用于计算数据类型的大小。例如,在函数`void Func(char str[100])`中,`sizeof(str)`会返回数组的大小,即字符类型的个数加上隐含的结束符,共101个字节,但由于数组作为函数参数时退化为指针,因此实际上`sizeof(str)`等于指针的大小,即4字节。对于`char str[] = "Hello";`,`sizeof(str)`会返回字符串常量的实际长度,包括结束符,共6字节。对于指针变量`char *p`,`sizeof(p)`始终返回指针的大小,通常为4字节。对于整型变量`int n = 10;`,`sizeof(n)`返回整型的大小,通常也为4字节。`malloc(100)`分配的内存空间大小不通过`sizeof`计算,它返回的是指针,所以`sizeof(p)`依然为4字节。 简答题部分: 1. 头文件中的`#ifndef/#define/#endif`是预处理器指令,用于防止头文件在同一个编译单元中被多次包含。`#ifndef`检查宏定义,如果未定义则执行到`#endif`之间的代码,并定义该宏,防止后续再次包含。 2. `#include<filename.h>`和`#include“filename.h”`的区别在于包含路径的不同。前者是系统头文件,编译器会从标准库路径查找;后者是用户头文件,编译器首先在当前工作目录查找。 3. `const`关键字有多种用途: - 定义常量:`const int a = 10;`,a的值不能被修改。 - 函数参数:`void func(const int b)`,确保函数内部不会改变传入的b。 - const成员函数:允许类的方法只读取成员变量,而不进行修改。 - const指针:`const char* c`,c所指向的内容不能修改,但指针本身可以改变。 - 指针const:`char* const d`,d的指向不能变,但所指内容可以修改。 - const成员变量:在类中定义,保证对象创建后其值不可变。 以上就是C语言笔试题中涉及的关键知识点,包括基本类型比较、`sizeof`运算符的应用以及`const`关键字的多方面使用。掌握这些内容对于理解和编写高质量的C/C++代码至关重要。