C++与C语言面试必备:变量作用域与存储类型解析

需积分: 3 9 下载量 95 浏览量 更新于2024-08-02 收藏 98KB DOC 举报
"C++和C语言面试题集,包括局部变量与全局变量的使用、extern关键字、do...while和while...do的区别、static变量和函数的作用,以及内存区域的划分等知识点。" 在C++和C语言中,面试题常常涉及到变量的作用域、存储类别和函数的特性。以下是对这些知识点的详细解释: 1. **局部变量与全局变量的重名问题**: - 局部变量可以在函数内部声明,它们的作用域仅限于所在的函数或代码块。如果局部变量与全局变量同名,局部变量会遮蔽全局变量,即在该函数内部访问的是局部变量,而非全局变量。要访问全局变量,需要使用作用域解析运算符`::`。 2. **引用全局变量**: - 如果要在某个文件或函数中引用已在其他文件中定义的全局变量,需要使用`extern`关键字来声明变量的存在,但不分配新的存储空间。 3. **do...while和while...do的区别**: - `do...while`循环先执行循环体,然后检查条件是否满足,如果满足则继续循环,否则退出。这意味着即使条件最初不满足,do...while循环也会至少执行一次。 - `while...do`则是先检查条件,条件满足才执行循环体,如果不满足则直接跳过,不会执行一次。 4. **static变量的区别**: - **静态全局变量**:与普通全局变量相比,静态全局变量只在定义它的源文件中可见,不能被其他源文件访问,这限制了其作用域,但生命周期贯穿整个程序运行。 - **静态局部变量**:只在第一次声明时初始化,后续函数调用不再重新初始化,而是保留上次的值,这使得它在函数调用之间保持状态。 - **静态函数**:只在声明它的源文件中可见,不能被其他源文件直接调用,提高了代码的封装性,减少命名冲突的可能性。 5. **内存区域划分**: - **局部变量**:通常存储在栈区,函数执行时分配,执行完毕后自动释放。 - **全局变量**和静态局部变量:存储在静态区,程序开始时初始化,程序结束时释放。 - **动态申请的数据**:通过`malloc`、`calloc`、`realloc`等函数在堆区分配,程序员负责管理其生命周期,使用`free`释放。 6. **typedef和结构体的使用**: - `typedef`用来创建类型别名,如示例中的`DATE`,它可以简化类型名称,使得代码更易读。 - `struct data`定义了一个结构体类型,包含了整型成员`cat`,联合体`DATE`成员`cow`和双精度浮点型成员`dog`。 - `DATE max;`声明了一个名为`max`的`DATE`类型的变量。 7. **sizeof运算符**: - `sizeof`运算符用于获取数据类型或变量所占用的字节数。示例中的`printf("%d", sizeof(max))`将打印`DATE`类型变量`max`的大小。 这些是C++和C语言面试中常见的基础概念,理解并掌握它们对于面试和实际编程都至关重要。在面试中,除了基本概念,还会考察对指针、内存管理、预处理器、模板、异常处理、STL库等更高级主题的理解。