C/C++面试题:条件判断、sizeof计算与内存管理
需积分: 9 68 浏览量
更新于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++编程的实践能力和理论水平。
2021-06-17 上传
533 浏览量
2009-08-01 上传
2011-05-20 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2012-08-27 上传
fs_wells
- 粉丝: 3
- 资源: 28
最新资源
- 全国江河水系图层shp文件包下载
- 点云二值化测试数据集的详细解读
- JDiskCat:跨平台开源磁盘目录工具
- 加密FS模块:实现动态文件加密的Node.js包
- 宠物小精灵记忆配对游戏:强化你的命名记忆
- React入门教程:创建React应用与脚本使用指南
- Linux和Unix文件标记解决方案:贝岭的matlab代码
- Unity射击游戏UI套件:支持C#与多种屏幕布局
- MapboxGL Draw自定义模式:高效切割多边形方法
- C语言课程设计:计算机程序编辑语言的应用与优势
- 吴恩达课程手写实现Python优化器和网络模型
- PFT_2019项目:ft_printf测试器的新版测试规范
- MySQL数据库备份Shell脚本使用指南
- Ohbug扩展实现屏幕录像功能
- Ember CLI 插件:ember-cli-i18n-lazy-lookup 实现高效国际化
- Wireshark网络调试工具:中文支持的网口发包与分析