C++面试必备:基础试题与解析

需积分: 33 19 下载量 147 浏览量 更新于2024-09-17 1 收藏 142KB PDF 举报
"C++经典面试题" 这是一份针对C++和C程序员设计的经典面试题集,主要测试考生的基础编程技能和对C++/C语言的理解程度,而不涉及高级概念如数据结构、算法或复杂的语法。题目涵盖基本类型比较、sizeof运算符的应用、头文件处理、const关键字的用途、C++与C兼容性问题,以及内存管理等多个方面。 1. **基本类型与“零值”比较**: - 对于BOOL类型的flag,与“零值”比较的if语句通常是`if(flag == FALSE)`或`if(!flag)`。 - 对于float类型的x,与“零值”比较的if语句可以是`if(x == 0.0)`或`if(x != 0.0)`。 - 对于char类型的指针p,与“零值”(空指针)比较的if语句通常是`if(p == NULL)`或`if(p != NULL)`。 2. **sizeof运算符**: - 在`void Func(char str[100])`中,`sizeof(str)`会返回数组的大小,即100,因为数组在函数参数中作为指针传递,其大小是类型(char)的大小乘以数组长度。 - 当`char str[] = "Hello"`定义在全局或静态存储区时,`sizeof(str)`会返回6,包括字符串结束符'\0'。 - 对于`char *p = str;`,`sizeof(p)`始终返回指针的大小,通常为4或8字节,取决于系统。 - `int n = 10;`的`sizeof(n)`通常为4字节(32位系统)或8字节(64位系统)。 - 分配100字节的动态内存后,`void *p = malloc(100);`的`sizeof(p)`依然返回指针的大小,与`p`指向的内容无关。 3. **简答题**: - `ifndef/define/endif`通常用于防止头文件被多次包含,确保每个头文件只被预处理一次。 - `#include <filename.h>`是标准库引用,搜索路径在编译器预定义的目录;`#include "filename.h"`是用户库引用,先在当前目录搜索,然后是编译器指定的用户库路径。 - const可以用来声明常量,防止变量被意外修改,也可以用于函数参数,表明参数不会被函数内部修改,有助于编译器优化。 - C++使用extern "C"是为了兼容C编译器,因为C++使用名称修饰(name mangling),而C不使用,这样可以确保C函数在C++代码中能正确链接。 - 第一个for循环的优点是简洁,但缺点是无论条件是否满足,循环都会执行N次。第二个for循环的优点是只有满足条件时才会执行循环,但缺点是代码重复,增加了阅读和维护的复杂性。 4. **内存思考题**: - `void GetMemory(char* p)`函数分配的内存是在堆上,但函数结束后,分配的内存没有被释放,可能导致内存泄漏。如果`Test`函数或其他地方没有保存对`p`的引用,这块内存将无法访问。 - 在`Test`函数中直接调用`GetMemory`,`p`只是传递了一个副本,不会改变`Test`函数外部的`p`,因此`p`在`Test`函数内部仍然是未初始化的,尝试访问可能会导致未定义行为。 以上内容详尽解答了题目中涉及的C++基础知识,对于准备C++面试或提升编程技能都有很大帮助。