73.全局变量和局部变量有什么区别?

发布时间 2023-07-11 15:19:34作者: CodeMagicianT

73.全局变量和局部变量有什么区别?

C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。

全局变量和局部变量主要在作用域、定义位置、内存存储方式、生命期以及使用方式上存在明显的区别。

1.作用域:全局变量的作用域是整个程序,而局部变量的作用域仅限于函数内部。也就是说,全局变量可以在程序的任何地方被访问,而局部变量只能在函数内部使用。

2.定义位置:全局变量定义在函数之外,而局部变量定义在函数内部。这意味着全局变量可以在任何地方被声明和访问,而局部变量只能在函数内部被声明和访问。

3.内存存储方式:全局变量存储在全局数据区,而局部变量存储在栈区。全局变量在整个程序运行期间都存在,而局部变量在函数执行时存在,函数执行结束后就不再存在。

4.生命期:全局变量的生命期和主程序一样,随程序的销毁而销毁,而局部变量的生命期仅限于函数内部,在函数退出时不再有效。

5.使用方式:全局变量在声明后程序的各个部分都可以使用,而局部变量只能在局部使用。

总的来说,全局变量和局部变量在多个方面存在明显的区别,需要根据具体场景和需求选择合适的方式使用。

1.全局变量

●在函数外定义,可被本文件及其它文件中的函数所共用,若其它文件中的函数调用此变量,须用extern声明

●全局变量的生命周期和程序运行周期一样

●不同文件的全局变量不可重名

2.局部变量

局部变量也叫auto自动变量(auto可写可不写),一般情况下代码块{}内部定义的变量都是自动变量,它有如下特点:

●在一个函数内定义,只在函数范围内有效

●在复合语句中定义,只在复合语句中有效

●随着函数调用的结束或复合语句的结束局部变量的声明声明周期也结束

● 如果没有赋初值,内容为随机

3.静态(static)局部变量

静态变量的类型说明符是static。静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。

3.1静态(static)局部变量

●静态局部变量在函数内定义它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后,尽管该变量还继续存在,但不能使用它。

●static局部变量的生命周期和程序运行周期一样,同时staitc局部变量的值只初始化一次,但可以赋值多次

●static局部变量若未赋以初值,则由系统自动赋值:数值型变量自动赋初值0,字符型变量赋空字符

3.2静态(static)全局变量

●在函数外定义,作用范围被限制在所定义的文件中

●不同文件静态全局变量可以重名,但作用域不冲突

●static全局变量的生命周期和程序运行周期一样,同时staitc全局变量的值只初始化一次

内存分配位置影响生命周期

区别 静态全局变量 非静态全局变量 静态局部变量 非静态局部变量
作用域 全局 全局 局部 局部
内存分配 静态数据区 静态数据区 静态数据区 栈区
生命周期 整个程序 整个程序 整个程序 局部函数体
对外链接 不允许 允许 不允许 不允许