C++变量 生存期 作用域

本文详细介绍了C++中的变量作用域,包括局部变量和全局变量的概念。同时,探讨了变量的存储类别,如静态存储和动态存储,并分别讨论了auto、register、extern和static四种存储类型的特性和用途。全局变量和局部变量的生存期和作用域得到了清晰的阐述,强调了静态存储如何影响变量的生命周期和作用域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

变量的作用域:(决定了变量的有效范围) 分为局部变量 和 全局变量

每个变量和函数都有2个属性:数据类型(作用域)和存储类别(生存期);在定义变量时要加以说明;

变量有效性范围称为作用域;

局部变量:函数内部定义的变量,作用域和生存期在函数内;main函数中定义的变量也只是在其函数内;

                  形参变量属于被调函数的局部变量,实参属于主调函数的局部变量;

                  复合语句内定义的变量只在复合语句内有用;                   

全局变量:

                如果函数外部定义的变量是外部变量,

                如果外部变量定义出现在文件的开始部分,它就是全局变量,外部变量不属于哪个函数,它可以为源文件中其他函数共用;

                 在局部变量的作用域内,外部变量不起作用;   

////////////////////////////////////////////////////////////////////////////////////////////////////////  

变量的存储类别:(决定了变量的生存期)

变量存储类别(存储方式):是指变量占用内存空间的方式;分为静态存储、动态存储;

静态是在程序运行期间分配固定的存储空间的方式;全局变量全部分配在静态存储区;

动态是在程序运行期间动态分配的存储空间的方式;

           动态变量: 函数形参、自动变量(未加static的局部变量)、函数调用时 的现场保护和返回地址;--它们在函数结束时生命期就结束了;

C++ 有4种的存储类型:

outo : 

       函数、复合语句内未加存储类型说明的都属于自动变量,它的作用域是在函数体、复合语句内,生存期是在退出函数前,函数调用结束后,自动变量的值不能被保存;

       函数体外、文件中定义的变量,是全局变量,

register:

       需要反复循环使用的变量就可以定义成register变量,该类型的变量不用通过内存,而是直接在寄存器中访问,它可以提升软件的效率; 该变量不存放在内存中,它存放在cup的寄存器中,可以提升效率。

以上2种属于动态存储方式;

extern:

          全局变量(作用域提出的)即为外部变量(存储方式提出的,表示了它的生存期);

          如果定义该extern的变量所在的程序有多个源文件,则该变量也是被其他源文件可用,但要保含该变量所在的头文件;

如果全局变量(非函数内或者复合语句内的变量)之前不加extern ,则在外部文件是访问不到的,只有在定义它的文件里才能访问它;

定义一个类的全局对象的方法:在头文件中extern A a;  在cpp文件中去 A a; 然后在需要用到这个全局对象的文件中包含类A的头文件,这些类是整个程序都要用的唯一一份的全局变量,比如用于记录软件运行日志的类CLogofile。

          如果extern变量前面没有加static,它的作用域是整个程序;加了static,则只在该文件里有用;

static :

       函数内如果带static的变量,生存期就是整个程序退出时,该变量的值会保留到下次访问函数时;也就是说不随着函数的退出而被清空里面的的值;作用域是函数内;

       函数外定义的static的变量,生存期也是整个程序退出时,该变量的值保留到下次访问到它时;作用域是变量所在的文件;

以上2种属于静态存储方式。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值