C/C++面试题精华:条件判断与sizeof解析

需积分: 3 2 下载量 73 浏览量 更新于2024-10-21 收藏 60KB DOC 举报
"C&C++各种面试题目总结" 这篇资源总结了C和C++面试中常见的问题,涵盖了笔试题和简答题,旨在帮助求职者准备面试。以下是对这些知识点的详细解释: 一、BOOL, float, 指针变量与“零值”比较 在C/C++中,正确的比较方式对于避免逻辑错误至关重要。 1. BOOL flag 的比较:在C++中,BOOL通常是一个宏定义,等同于int。因此,正确的比较是`if(flag)` 和 `if(!flag)`。避免使用等于特定布尔值的比较,因为这可能导致代码不易理解和维护。 2. float x 的比较:由于浮点数的精度问题,直接使用`==`或`!=`与0比较可能导致不准确的结果。正确的做法是设置一个极小的误差范围,如`const float EPSILON = 0.00001;`,然后使用`if((x >= -EPSILON) && (x <= EPSILON))`。直接写`if(x == 0.0)`是错误的,因为它忽略了浮点数的精度误差。 3. char* p 的比较:指针与NULL或0比较时,应使用`if(p == NULL)` 和 `if(p != NULL)`。直接写`if(p)` 或 `if(!p)`虽然功能上等效,但不符合良好的编程风格。 二、sizeof运算符 sizeof运算符用于计算数据类型或变量占用的内存大小。在Windows NT下,针对32位系统: 1. char str[] = "Hello"; 字符数组实际上包含6个字符('H', 'e', 'l', 'l', 'o', '\0'),所以`sizeof(str) = 6`。 2. char* p = str; 指针p本身占用4个字节,所以`sizeof(p) = 4`。 3. int n = 10; int类型在32位系统中通常占用4个字节,所以`sizeof(n) = 4`。 4. 在函数`void Func(char str[100])`内部,`str`被视为指针,因此`sizeof(str) = 4`。 5. 动态分配的内存大小不受sizeof影响,`void* p = malloc(100);`,指针p仍占用4个字节,但动态分配的内存大小是100字节。 三、简答题 1. ifndef/define/endif:这是预处理器指令,用于防止头文件被多次包含。如果头文件中的符号(通常是一个唯一的标识符,如`PROJECT_NAME_H`)未被定义,则编译器会执行其中的代码;一旦定义,后续的包含将被忽略,避免重复定义导致的问题。 2. #include 和 #include "filename.h":`#include <filename.h>` 是标准库引用,编译器从系统头文件路径开始查找。`#include "filename.h"` 是用户头文件引用,编译器从当前工作目录开始查找。两者的主要区别在于搜索路径的不同。 3. const的用途: - 定义常量:`const int MY_CONSTANT = 10;` 创建了一个不能修改的整型常量。 - 函数参数和返回值:`void func(const int x)` 确保传递给函数的参数`x`不会在函数内部被修改。 - 常量指针和指针常量:`const char* ptr` 表示ptr指向的内容不可变;`char* const ptr` 表示ptr自身不可变,但可以改变它所指向的内容;`const char* const ptr` 则表示两者都不可变。 - const成员函数:声明成员函数不会修改对象的状态,提供了一种编译时的保护。 以上就是C/C++面试中涉及的一些关键知识点,包括类型比较、sizeof运算符的使用以及const关键字的作用。了解并掌握这些概念对于理解和解决面试中的问题至关重要。