全局变量、静态全局变量、静态局部变量和局部变量的区别2.pdf
### 全局变量、静态全局变量、静态局部变量与局部变量的区别 #### 一、概述 在编程领域,根据变量的作用域以及存储位置的不同,我们可以将变量大致分为四类:全局变量、静态全局变量、静态局部变量以及局部变量。这四种变量在C/C++等语言中有不同的特点和应用场景。 #### 二、按存储区域划分 按照存储区域来划分,全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区(也称为静态存储区),而局部变量则存放在内存的栈区。 1. **全局变量**:在程序的整个执行过程中始终存在,即使在函数调用结束之后也不会被销毁。 2. **静态全局变量**:具有全局变量的特点,但其作用范围仅限于定义它的源文件内部。 3. **静态局部变量**:存储在全局数据区,但其作用范围仅限于定义它的函数内部,并且在函数调用结束后仍然保留其值。 4. **局部变量**:存在于函数的栈区,每次函数调用时都会重新创建并初始化,函数调用结束后被销毁。 #### 三、按作用域划分 按照作用域来划分,这四种变量的作用域有所不同: 1. **全局变量**:在整个工程文件内有效,即在整个程序的任何地方都可以访问到。 2. **静态全局变量**:只在其定义的源文件内有效,即便其他文件也包含相同的名称也不会发生冲突。 3. **静态局部变量**:只在定义它的函数内部有效,但在函数执行期间只分配一次内存空间,函数返回后,变量依然存在。 4. **局部变量**:只在其定义的函数或代码块内有效,当函数或代码块执行完毕后即被销毁。 #### 四、初始化与默认值 - **全局变量和静态变量**:如果未手动初始化,则由编译器自动初始化为0。 - **局部变量**:如果不进行初始化,则其值是不确定的,具体取决于编译器的实现细节。 #### 五、示例分析 下面通过一个具体的代码示例来进一步理解这些概念: ```cpp // test.cpp #include <iostream> extern int a; // 变量声明,不是定义 static int b = 5; void func1() { std::cout << b << std::endl << a << std::endl; // 结果为5 } // main.cpp int a; int b = 10; void func2() { static int i; i++; // i的值会保留下来 std::cout << i << std::endl; } void func1(); int main() { a = 20; func1(); func2(); func2(); return 0; } ``` 运行结果: ``` 5 20 1 2 ``` **分析**: - 在`func1()`中,`b`为静态局部变量,其值为5;`a`为全局变量,由于在`main.cpp`中被赋值为20,因此输出为5和20。 - `func2()`中的`i`为静态局部变量,在第一次调用时初始化为0,随后每次调用增加1,因此输出为1和2。 #### 六、总结 通过上述分析可以看出,不同类型的变量在存储位置、作用域以及生命周期等方面存在显著差异。了解这些差异有助于编写更高效、可维护的代码。在实际开发中,合理选择变量类型对于提高程序性能和可读性具有重要意义。

- 粉丝: 1
我的内容管理
展开
我的资源
快来上传第一个资源
我的收益 登录查看自己的收益
我的积分
登录查看自己的积分
我的C币
登录后查看C币余额
我的收藏
我的下载
下载帮助
前往需求广场,查看用户热搜最新资源
- 基于物联网技术智能附着式脚手架智能控制保护系统的研究.docx
- 中小企业组建无线网络方案.docx
- 信用评软件设计方案方法的比较分析研究.doc
- 人力资源管理课程项目管理化设计.doc
- 互联网环境下中国电影市场在发展中存在的问题分析.docx
- 通信工程专业毕业论文.doc
- 认识计算机课件.ppt
- 智能交通系统中的计算机视觉技术应用研究.docx
- Web2.0-时代下的西藏旅游目的地形象建设初探.doc
- 浅析计算机存储器分层结构.docx
- 三级电子商务标准答案.docx
- 浅议中职计算机应用基础课程在非计算机专业教学中的改革与创新.docx
- sa算法及安全性分析.ppt
- 面向土木专业人才培养的《计算机程序设计》学习课程改革实践与探索.doc
- 新时期高校管理的信息化建设及国际化发展.docx
- 多媒体技术在中职计算机教学中的应用.docx


信息提交成功