C/C++面试必看:经典题目解析

需积分: 3 1 下载量 150 浏览量 更新于2024-10-10 收藏 19KB TXT 举报
"C/C++经典面试题,包含了一些面试中常见的问题,涉及类型大小、二分查找、字符串处理和数组排序等核心知识点。" 在C/C++编程领域,面试时常常会遇到一些典型的问题,这些问题能反映出应聘者对语言特性和算法的理解程度。以下是对这些面试题的详细解析: 1) **类型大小与结构体对齐**: - 在C/C++中,`sizeof`运算符用于计算类型或变量所占用的内存字节数。 - 对于`struct s{char a; int b;}`,由于默认的内存对齐规则,`int`通常为4字节,所以尽管`char`只占1字节,但整个结构体大小是8字节,确保`int`在4字节边界上。 - `struct s{int a; char b;}`中,`int`在前,`char`在后,结构体大小是5字节,因为`char`可以放在`int`的后面,不需额外填充。 - `int a[200]`是一个包含200个整数的数组,其大小是200 * sizeof(int),假设`int`为4字节,则为800字节。而`int *a = new int[200]`,指针`a`本身仅占4字节,它指向数组的首地址。 - 在位字段`struct bits`中,每个成员按位存储,总大小为8位,但实际占用的字节数取决于编译器的实现,一般为1字节。 2) **二分查找算法**: - 二分查找是一种在有序数组中查找特定元素的高效算法。给定的代码实现了一个递归版本的二分查找,函数`bfind`。它首先找到数组中间元素,然后根据中间元素与目标值的比较结果,缩小搜索范围,直到找到目标值或确定不存在。 3) **计数子串出现次数**: - `count1`函数用于计算字符串`str`中子串`s`出现的次数。通过两个指针`str1`和`str2`分别遍历`str`和`s`,比较它们的对应字符,如果所有字符都匹配且`s2`到达末尾,则子串`s`在`str`中出现一次,更新计数器`count`。 4) **查找子串并返回首次出现位置**: - `find`函数寻找字符串`str1`中子串`s2`的首次出现位置。它遍历`str1`,在每个位置尝试匹配`s2`,一旦找到匹配的子串,返回其开始索引。如果未找到,则返回`len1`,即`str1`的长度。 5) **快速排序中的分区操作**: - 快速排序是一种高效的排序算法,其中`partition`函数是关键步骤。它接受一个数组`a`、两个下标`l`和`r`,并返回一个`pivot_index`,使得数组`a[l..pivot_index-1]`的所有元素都小于`pivot`(通常取`a[r]`),而`a[pivot_index+1..r]`的所有元素都大于`pivot`。 以上题目覆盖了C/C++的基础语法、内存管理、数据结构以及算法等多个方面,是评估候选人编程能力的良好工具。在准备面试时,理解并熟练掌握这些知识点是至关重要的。