西邮Linux小组2021纳新面试题详解:sizeof()与strlen比较及结构体内存分析

需积分: 0 0 下载量 201 浏览量 更新于2024-08-03 收藏 11KB MD 举报
西邮Linux兴趣小组2021年的纳新面试题集涵盖了一些基本的C语言概念,旨在测试候选人的编程基础和对数据类型理解的深度。题目分为两个部分,主要关注了`sizeof()`和`strlen()`这两个函数的差异,以及结构体大小计算中的细节。 第一个问题探讨了`sizeof()`和`strlen()`的区别。`sizeof()`是C语言中的运算符,它用于计算数据类型或变量所占用的内存字节数,而不仅仅是存储的字符数量。在提供的代码示例中,`chars[]`是一个包含字符串"IloveLinux"的字符数组,`sizeof(s)`返回整个数组占用的字节数(包括结束符`\0`),结果为15,因为它包含了四个字符和一个空字符。而`strlen(s)`则仅计算有效字符的数量,不包括结束符,所以结果是10。这展示了`sizeof()`考虑了类型和填充,而`strlen()`只关注实际字符序列的长度。 第二个问题涉及到结构体大小的比较。结构体`test1`和`test2`虽然包含相同的成员(一个`short`、一个`int`和一个`double`),但它们的成员排列不同。在`test1`中,`int`成员在`short`之后,而在`test2`中,`int`在`short`之前。由于`short`和`int`的数据类型大小不同(通常`short`小于`int`),尽管总的元素数量和类型相同,但是内存布局的差异导致了`sizeof(t1)`和`sizeof(t2)`不相等。具体大小取决于编译器的实现,但一般来说,`test2`的大小可能会稍大,因为`int`成员需要移动到更靠后的位置来满足不同类型之间的对齐规则。 这些问题不仅考察了面试者的C语言基础,还涉及到了编译器优化和内存管理的基本原理,有助于评估候选人对底层概念的理解。此外,题目强调了实际编程实践中对函数用法和结构体设计的考量,体现了面试者在实际项目中的适应能力和问题解决能力。