C/C++面试题:条件判断、sizeof计算与内存管理

需积分: 9 3 下载量 14 浏览量 更新于2024-11-03 收藏 66KB DOC 举报
"C/C++面试题,涵盖了基础语法、类型比较、内存管理及程序设计等方面,旨在测试面试者对C/C++语言的理解和应用能力。" 一、BOOL, float, 指针变量与“零值”比较的if语句 在C/C++中,BOOL类型通常是一个整型别名,因此它可以用整数0来表示FALSE。对于BOOL类型的变量flag与“零值”比较,可以写为: ```c++ if (flag == FALSE) // 或者 if (!flag) if (flag != FALSE) // 或者 if (flag) ``` 对于float类型的变量x与“零值”比较,可以写为: ```c++ if (x == 0.0f) if (x != 0.0f) ``` 对于指针变量char *p与“零值”比较,可以写为: ```c++ if (p == NULL) // 或者 if (!p) if (p != NULL) // 或者 if (p) ``` 二、sizeof运算符的计算 在Windows NT下,32位C++程序中,sizeof运算符用于计算数据类型的大小。根据题目: - sizeof(str):一个字符串常量数组实际上是一个字符数组,包含字符串本身和结束符'\0',所以`sizeof(str)`等于字符串的长度6加上1个结束符,共7个字节。 - sizeof(Func):由于没有给出Func的具体实现,无法确定其大小,通常函数不占用内存空间,但可能包含虚表指针等信息,这取决于是否为类成员函数或是否有虚函数。 - sizeof(p):一个指针变量在32位系统中通常为4个字节。 - sizeof(n):一个int类型的变量在32位系统中通常为4个字节。 - sizeof(malloc(100)):malloc返回的是一个指向分配内存的指针,其本身的大小依然是32位系统的指针大小,即4个字节。 三、简答题 1. 头文件中的`ifndef/define/endif`用来防止头文件被多次包含,避免重复定义导致的编译错误。 2. `#include<filename.h>`是标准库的引用方式,适用于系统头文件,而`#include"filename.h"`是用户自定义头文件的引用方式,适用于项目内的头文件。 3. const关键字有多种用途: - 声明常量,如`const int a = 10;`,a的值不可修改。 - 声明只读对象,如`const char *s = "hello";`,不能通过指针修改字符串内容。 - 用于函数参数,表明该参数不会在函数内部修改,提供安全保证。 - 用于函数返回值,表明返回的对象不应被修改,提示调用者。 4. 在C++中调用C编译的函数,需加`extern "C"`声明,因为C++支持名称修饰(name mangling),而C语言不进行名称修饰,加此声明可保持C函数的原名。 5. 两个for循环的优缺点: - 第一个循环: 优点:结构简单,易于理解。 缺点:循环体内部的条件检查与循环控制耦合度较高,可能导致不必要的计算。 - 第二个循环: 优点:先进行条件检查,只在满足条件时执行循环,提高了效率。 缺点:结构较为复杂,需要两层嵌套,不易阅读。 四、内存思考题 1. `void GetMemory(char *p)`中,调用`malloc(100)`分配了100字节的内存,并将其地址赋给p。但该函数没有返回分配的内存,导致内存泄漏。 2. `char *GetMemory(void)`中,直接返回一个字符串字节数组的地址,这个数组在函数结束时会被自动释放,因此返回的指针很快就会成为悬挂指针。 这些面试题主要考察C/C++的基础知识,包括类型比较、内存管理、预处理指令以及程序设计原则。理解这些问题的答案有助于提升C/C++编程的实践能力和理论水平。