C/C++编程:静态变量与函数的区别解析

需积分: 0 1 下载量 89 浏览量 更新于2024-09-18 收藏 28KB DOC 举报
"C/C++语言程序设计的笔试面试题,涵盖了静态变量和函数的相关知识点,以及内存区域的分配和结构体类型的尺寸计算。" 在C/C++编程中,理解和掌握变量的不同类型及其特性是非常重要的。以下是根据题目提供的内容详细解释的一些关键知识点: 1. **静态全局变量与普通全局变量的区别**: - 静态全局变量的生命周期从程序开始到结束,但作用域仅限于声明它的源文件。这意味着它们在其他源文件中不可见,降低了命名冲突的风险。 - 普通全局变量具有全局作用域,可以在程序中的任何地方被访问,这可能导致命名冲突,并增加了程序的耦合度。 2. **静态局部变量与普通局部变量的区别**: - 静态局部变量只在定义它的函数内可见,且在每次函数调用时保持其上次调用的值。也就是说,它不会在每次函数调用时重新初始化,而是保留上一次的值。 - 普通局部变量在每次函数调用时都会被重新初始化,其生命周期仅限于当前函数调用。 3. **静态函数与普通函数的区别**: - 静态函数的作用域仅限于定义它的源文件,不允许其他文件引用,这有助于封装和降低模块间的依赖。 - 普通函数(也称为外部函数)可以在程序的任何地方被调用,只要正确地包含了对应的头文件。 4. **内存区域划分**: - 局部变量通常存储在栈(Stack)区域,栈上的空间由编译器自动分配和释放,效率高但空间有限。 - 全局变量和静态变量存储在静态区(Static Area),在程序运行期间始终存在。 - 动态申请的数据(如通过`malloc`或`new`)分配在堆(Heap)区域,程序员需要手动管理这部分内存的分配和释放,否则可能导致内存泄漏。 5. **结构体与联合体的尺寸计算**: - 在题目中,`DATE`是一个联合体(Union),它的大小等于其成员中占用最大空间的成员的大小,即`int[5]`,因为联合体的所有成员共享同一块内存。 - `struct data`是一个结构体(Struct),其成员的大小是累加的,不考虑对齐等因素,`DATE`的大小是20字节,`int cat`占用4字节,所以`sizeof(struct data)`是24字节。 - `max`是一个`DATE`类型的变量,其大小也是20字节。 - 结构体和联合体的总大小为`sizeof(struct data) + sizeof(max)`,即24 + 20 = 44字节。然而,题目给出的答案是52,这可能是因为实际的内存对齐规则导致的差异。 以上是C/C++编程中关于静态变量、函数和内存管理的基础知识,这些概念对于编写高效、健壮的代码至关重要。在面试或笔试中,对这些知识点的深入理解将有助于展示候选人的专业技能。