C/C++春招面试精华:内存区划分与结构体实践

需积分: 9 1 下载量 185 浏览量 更新于2024-08-04 收藏 32KB DOCX 举报
本篇文章主要聚焦于C/C++语言的面试题,涉及多个知识点,旨在测试应聘者对C/C++编程基础、内存管理、函数调用、结构体与内存对齐以及指针操作的理解。 **一、内存区域与变量生命周期** 1. 题目1要求分析`func1`函数中变量的存储区域。`static int v2;`和`static int v3;`在静态存储区分配,它们的生命周期贯穿整个程序运行。`int v3;`在栈内存分配,每次函数调用时创建一个新的副本,函数结束时自动释放。 2. 问题2询问变量的有效性。当`func1`返回时,局部变量`v1`和`v3`将不再有效,因为它们只在函数作用域内存在。静态变量`v2`则继续存在,直到程序结束。 **二、函数调用** 3. 对于函数声明`int func1(int p1, int *p2, int &p3);`,正确的调用方式是C选项:`r=func1(x, &y, z);`。这是因为传递指针时需要使用`&`运算符获取地址,`*y`是值传递,而非地址。 **三、指针操作与函数内部作用** 4. 在`sub_func`函数中,通过指针`p1`修改了`x1`,`*p2`修改了`x2`的值,并间接影响了`p3`。调用后,`x1`加1,`x2`变为`4 * 3 = 12`,`x3`变为`12 * (4 + 1) = 52`,所以输出为`x1=4, x2=12, x3=52`。 **四、结构体与内存对齐** 5. 问题1要求定义一个描述学生信息的结构体,如`struct Student { char name[10]; char sex; int age; char addr[200]; }`。这里定义了一个包含姓名、性别、年龄和住址的基本结构。 6. 问题2涉及到内存对齐。由于`char`通常占1字节,`int`占4字节,而结构体成员默认按最宽类型对齐,所以`struct Student`的总大小至少为`10 + 1 + 4 + 200 = 215`字节。加上4字节对齐带来的额外空白,实际占用的字节数为`215 + ((215 % 4) ? 4 : 0)`。 **五、内存管理与类型定义** 7. 最后一段代码展示了`typedef`和`struct`的使用,其中`struct_Msg`定义了一个包含名称、数据长度和可变数据区的结构。`HLen`宏计算的是`Msg`结构体的`data`部分的大小,但题目没有给出具体的`data`大小,需要根据实际应用场景来填充。 本文档涵盖了C/C++语言的内存管理、函数调用规则、结构体定义及内存对齐、类型定义和指针操作等多个核心知识点,旨在考察应聘者的编程基础和理解深度。