没有合适的资源?快使用搜索试试~ 我知道了~
C语言C++常见面试题(含答案).pdf
需积分: 10 6 下载量 121 浏览量
2021-04-13
09:50:04
上传
评论
收藏 1.53MB PDF 举报
温馨提示
常见的C和C++面试总结68个知识点。
资源推荐
资源详情
资源评论
2020/8/3 让微信排版变 Nice
https://mdnice.com 1/28
1 变量的声明和定义有什么区别
变 量 的 定 义 为 变 量 分 配 地 址 和 存 储 空 间 , 变 量 的 声 明 不 分 配 地 址 。 一 个 变 量 可 以 在
多 个 地 方 声 明 , 但 是 只 在 一 个 地 方 定 义 。 加 入 e x t e r n 修 饰 的 是 变 量 的 声 明 , 说 明
此 变 量 将 在 文 件 以 外 或 在 文 件 后 面 部 分 定 义 。
说 明 : 很 多 时 候 一 个 变 量 , 只 是 声 明 不 分 配 内 存 空 间 , 直 到 具 体 使 用 时 才 初 始 化 , 分
配 内 存 空 间 , 如 外 部 变 量 。
int main()
{
extern int A;
//这是个声明而不是定义,声明A是一个已经定义了的外部变量
//注意:声明外部变量时可以把变量类型去掉如:extern A;
dosth(); //执行函数
}
int A; //是定义,定义了A为整型的外部变量
2 简述#ifdef、#else、#endif和#ifndef的作用
利用#ifdef、#endif将某程序功能模块包括进去,以向特定用户提供该功能。在不需要时用户可轻易将其屏
蔽。
#ifdef MATH
#include "math.c"
#endif
在子程序前加上标记,以便于追踪和调试。
#ifdef DEBUG
printf ("Indebugging......!");
#endif
应对硬件的限制。由于一些具体应用环境的硬件不一样,限于条件,本地缺乏这种设备,只能绕过硬件,直
接写出预期结果。
注 意 : 虽 然 不 用 条 件 编 译 命 令 而 直 接 用 i f 语 句 也 能 达 到 要 求 , 但 那 样 做 目 标 程 序 长
( 因 为 所 有 语 句 都 编 译 ) , 运 行 时 间 长 ( 因 为 在 程 序 运 行 时 间 对 i f 语 句 进 行 测 试 ) 。
2020/8/3 让微信排版变 Nice
https://mdnice.com 2/28
而 采 用 条 件 编 译 , 可 以 减 少 被 编 译 的 语 句 , 从 而 减 少 目 标 程 序 的 长 度 , 减 少 运 行 时
间 。
3 写出int 、bool、 float 、指针变量与 “零值”比较的if 语句
//int与零值比较
if ( n == 0 )
if ( n != 0 )
//bool与零值比较
if (flag) // 表示flag为真
if (!flag) // 表示flag为假
//float与零值比较
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON) //其中EPSINON是允许的误差(即精度)。
//指针变量与零值比较
if (p == NULL)
if (p != NULL)
4 结构体可以直接赋值吗
声 明 时 可 以 直 接 初 始 化 , 同 一 结 构 体 的 不 同 对 象 之 间 也 可 以 直 接 赋 值 , 但 是 当 结 构 体
中 含 有 指 针 “ 成 员 ” 时 一 定 要 小 心 。
注 意 : 当 有 多 个 指 针 指 向 同 一 段 内 存 时 , 某 个 指 针 释 放 这 段 内 存 可 能 会 导 致 其 他 指 针
的 非 法 操 作 。 因 此 在 释 放 前 一 定 要 确 保 其 他 指 针 不 再 使 用 这 段 内 存 空 间 。
5 sizeof 和strlen 的区别
sizeof是一个操作符,strlen是库函数。
sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘\0’的字符串作参数。
编译器在编译时就计算出了sizeof的结果,而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数
据类型占内存的大小,而strlen计算的是字符串实际的长度。
数组做sizeof的参数不退化,传递给strlen就退化为指针了
6 C 语言的关键字 static 和 C++ 的关键字 static 有什么区别
2020/8/3 让微信排版变 Nice
https://mdnice.com 3/28
在 C 中 s t a t i c 用 来 修 饰 局 部 静 态 变 量 和 外 部 静 态 变 量 、 函 数 。 而 C + + 中 除 了 上
述 功 能 外 , 还 用 来 定 义 类 的 成 员 变 量 和 函 数 。 即 静 态 成 员 和 静 态 成 员 函 数 。
注 意 : 编 程 时 s t a t i c 的 记 忆 性 , 和 全 局 性 的 特 点 可 以 让 在 不 同 时 期 调 用 的 函 数 进
行 通 信 , 传 递 信 息 , 而 C + + 的 静 态 成 员 则 可 以 在 多 个 对 象 实 例 间 进 行 通 信 , 传 递 信
息 。
7 C 语言的 malloc 和 C++ 中的 new 有什么区别
new 、delete 是操作符,可以重载,只能在C++ 中使用。
malloc、free 是函数,可以覆盖,C、C++ 中都可以使用。
new 可以调用对象的构造函数,对应的delete 调用相应的析构函数。
malloc 仅仅分配内存,free 仅仅回收内存,并不执行构造和析构函数
new 、delete 返回的是某种数据类型指针,malloc、free 返回的是void 指针。
注 意 : m a l l o c 申 请 的 内 存 空 间 要 用 f r e e 释 放 , 而 n e w 申 请 的 内 存 空 间 要 用
d e l e t e 释 放 , 不 要 混 用 。
8 写一个 “标准”宏MIN
# d e f i n e m i n ( a , b ) ( ( a ) < = ( b ) ? ( a ) : ( b ) )
9 ++i和i++的区别
+ + i 先 自 增 1 , 再 返 回 , i + + 先 返 回 i , 再 自 增 1
10 volatile有什么作用
状态寄存器一类的并行设备硬件寄存器。
一个中断服务子程序会访问到的非自动变量。
多线程间被几个任务共享的变量。
注 意 : 虽 然 v o l a t i l e 在 嵌 入 式 方 面 应 用 比 较 多 , 但 是 在 P C 软 件 的 多 线 程 中 ,
v o l a t i l e 修 饰 的 临 界 变 量 也 是 非 常 实 用 的 。
11 一个参数可以既是const又是volatile吗
可 以 , 用 c o n s t 和 v o l a t i l e 同 时 修 饰 变 量 , 表 示 这 个 变 量 在 程 序 内 部 是 只 读 的 , 不
能 改 变 的 , 只 在 程 序 外 部 条 件 变 化 下 改 变 , 并 且 编 译 器 不 会 优 化 这 个 变 量 。 每 次 使 用
这 个 变 量 时 , 都 要 小 心 地 去 内 存 读 取 这 个 变 量 的 值 , 而 不 是 去 寄 存 器 读 取 它 的 备 份 。
2020/8/3 让微信排版变 Nice
https://mdnice.com 4/28
注 意 : 在 此 一 定 要 注 意 c o n s t 的 意 思 , c o n s t 只 是 不 允 许 程 序 中 的 代 码 改 变 某 一 变
量 , 其 在 编 译 期 发 挥 作 用 , 它 并 没 有 实 际 地 禁 止 某 段 内 存 的 读 写 特 性 。
12 a 和&a 有什么区别
& a : 其 含 义 就 是 “ 变 量 a 的 地 址 ” 。
* a : 用 在 不 同 的 地 方 , 含 义 也 不 一 样 。
在声明语句中,*a只说明a是一个指针变量,如int *a;
在其他语句中,*a前面没有操作数且a是一个指针时,*a代表指针a指向的地址内存放的数据,如b=*a;
*a前面有操作数且a是一个普通变量时,a 代 表 乘 以 a , 如 c = b a。
13 用C 编写一个死循环程序
while(1)
{ }
注 意 : 很 多 种 途 径 都 可 实 现 同 一 种 功 能 , 但 是 不 同 的 方 法 时 间 和 空 间 占 用 度 不 同 , 特
别 是 对 于 嵌 入 式 软 件 , 处 理 器 速 度 比 较 慢 , 存 储 空 间 较 小 , 所 以 时 间 和 空 间 优 势 是
选 择 各 种 方 法 的 首 要 考 虑 条 件 。
14 结构体内存对齐问题
请 写 出 以 下 代 码 的 输 出 结 果 :
#include<stdio.h>
struct S1
{
int i:8;
char j:4;
int a:4;
double b;
};
struct S2
{
int i:8;
char j:4;
double b;
int a:4;
};
2020/8/3 让微信排版变 Nice
https://mdnice.com 5/28
struct S3
{
int i;
char j;
double b;
int a;
};
int main()
{
printf("%d\n",sizeof(S1)); // 输出8
printf("%d\n",sizeof(S1); // 输出12
printf("%d\n",sizeof(Test3)); // 输出8
return 0;
}
sizeof(S1)=16
sizeof(S2)=24
sizeof(S3)=32
说 明 : 结 构 体 作 为 一 种 复 合 数 据 类 型 , 其 构 成 元 素 既 可 以 是 基 本 数 据 类 型 的 变 量 , 也
可 以 是 一 些 复 合 型 类 型 数 据 。 对 此 , 编 译 器 会 自 动 进 行 成 员 变 量 的 对 齐 以 提 高 运 算 效
率 。 默 认 情 况 下 , 按 自 然 对 齐 条 件 分 配 空 间 。 各 个 成 员 按 照 它 们 被 声 明 的 顺 序 在 内 存
中 顺 序 存 储 , 第 一 个 成 员 的 地 址 和 整 个 结 构 的 地 址 相 同 , 向 结 构 体 成 员 中 s i z e 最 大
的 成 员 对 齐 。
许 多 实 际 的 计 算 机 系 统 对 基 本 类 型 数 据 在 内 存 中 存 放 的 位 置 有 限 制 , 它 们 会 要 求 这 些
数 据 的 首 地 址 的 值 是 某 个 数 k ( 通 常 它 为 4 或 8 ) 的 倍 数 , 而 这 个 k 则 被 称 为 该 数 据 类
型 的 对 齐 模 数 。
15 全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎
么知道的?
全局变量是整个程序都可访问的变量,谁都可以访问,生存期在整个程序从运行到结束(在程序结束时所占
内存释放);
而局部变量存在于模块(子程序,函数)中,只有所在模块可以访问,其他模块不可直接访问,模块结束
(函数调用完毕),局部变量消失,所占据的内存释放。
操作系统和编译器,可能是通过内存分配的位置来知道的,全局变量分配在全局数据段并且在程序开始运行
的时候被加载.局部变量则分配在堆栈里面。
16 简述C、C++程序编译的内存分配情况
剩余27页未读,继续阅读
资源评论
Stargazer_Wang
- 粉丝: 395
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 将 yolov5 导出到 tflite 并在 Raspberry Pi 和 CPU 上运行推理.zip
- 将 pjreddie 的 DarkNet 带出阴影 #yolo.zip
- MPSK-AWGN性能仿真MATLAB源码
- 将 keras(tensorflow 后端)yolov3 h5 模型文件转换为 darknet yolov3 权重.zip
- 将 COCO 转换为 Pascal VOC 2012 格式的 Python 脚本.zip
- 将 COCO 注释(CVAT)转换为 YOLOv8-seg(实例分割)和 YOLOv8-obb(定向边界框检测)的注释.zip
- 章节2:编程基本概念之引用的本质-栈内存和堆内存-内存示意图.rar
- 章节2:编程基本概念之标识符-帮助系统简单使用-命名规则.rar
- fasfdsafaadfasfdasfs
- 如何使用 TensorRT 运行 yolov5 模型 .zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功