中标软件面试试题解析:逻辑判断与类型大小

4星 · 超过85%的资源 需积分: 9 205 下载量 195 浏览量 更新于2024-07-31 16 收藏 89KB DOC 举报
"这是一份关于中标软件面试题目的资料,涵盖了C++编程语言的基础知识,包括变量比较、数据类型尺寸、头文件处理以及const关键字的使用等常见问题。" 一、变量与“零值”比较 在C++中,正确的比较BOOL变量flag与“零值”的方式是: - 如果flag为真,则if(flag);如果flag为假,则if(!flag)。 避免使用等于或不等于特定布尔值(如TRUE、FALSE、0、1)的比较,因为这不符合良好的编程风格。 对于float类型的变量x与“零值”比较,应考虑到浮点数的精度问题,通常设置一个极小的误差值EPSINON,例如: - 如果x在-EPSINON和EPSINON之间,则认为x接近于0。正确的if语句是:if((x >= -EPSINON) && (x <= EPSINON))。 不要直接使用if(x == 0.0)或if(x != 0.0),因为浮点数的精确比较可能导致错误的结果。 对于指针变量p,正确的与“零值”比较方法是: - 如果p等于NULL,则if(p == NULL);如果p不等于NULL,则if(p != NULL)。 避免使用p == 0或p != 0,这样的写法不够清晰,也可能是错误的。 二、sizeof运算符 在Windows NT下,对于32位C++程序,sizeof运算符用于确定数据类型或对象占用的内存大小: - sizeof(str) = 6,字符串常量包括结束的空字符,所以长度是6。 - sizeof(p) = 4,指针在32位系统中通常占4个字节。 - sizeof(n) = 4,int类型占用4个字节。 在函数Func内部,sizeof(str) = 4,因为在这里str被视为指向字符的指针,占用4个字节。 - sizeof(p) = 4,动态分配的内存指针在32位系统中同样占用4个字节。 三、简答题 1. ifndef/define/endif组合用于头文件保护,确保头文件在同一个编译单元中只被包含一次,防止重复定义导致的错误。 2. `#include <filename.h>`是系统头文件引用,编译器从标准库路径开始查找;`#include "filename.h"`是用户头文件引用,编译器从当前工作目录开始查找。 3. const关键字的用途: - 定义常量,如`const int a = 10;`,a的值在程序执行期间不能改变。 - 修饰函数参数,使参数成为只读,防止函数内部修改传入的值,如`void func(const int b)`。 - 修饰函数返回值,表示返回的是不可修改的值,如`const int getNum() { return 20; }`。 - 修饰类的成员变量,创建常量成员,如`class MyClass { private: const int c; };` - 在指针或引用前使用const,表示指针或引用所指向的对象不可修改,如`int *const p = &a;` 4. 在C++程序中调用C编译器编译的函数时,需使用extern "C"来声明函数,这是因为C++使用名称修饰(name mangling),而C语言不进行此操作。extern "C"告诉C++编译器这些函数应按照C语言的规则进行处理,避免链接时因名称修饰不同导致的错误。例如: ```cpp extern "C" { #include "c_function.h" } ``` 这样,C++程序就可以正确调用C函数了。