C++与C语言面试必备:变量作用域与存储类型解析
需积分: 3 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库等更高级主题的理解。
250 浏览量
186 浏览量
218 浏览量
2014-02-28 上传
2019-05-22 上传
2008-07-31 上传
172 浏览量
143 浏览量