C++面试必备:基础试题与解析
需积分: 33 39 浏览量
更新于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++面试或提升编程技能都有很大帮助。
2011-10-14 上传
2008-12-02 上传
2014-12-23 上传
2011-04-25 上传
2011-08-26 上传
zf13momo
- 粉丝: 0
- 资源: 6
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍