C语言可能不清楚的知识点(4)——变量的作用域,生存期

本文详细介绍了C++中变量的作用域和生存期,包括局部变量、全局变量、静态变量和动态变量的区别。局部变量仅在定义的函数或复合语句内有效,调用结束后内存释放;全局变量在整个源文件内有效,静态全局变量限制于本文件;静态局部变量在程序运行期间一直存在。extern用于扩展全局变量的作用域,static则限制作用域或改变变量生命周期。注意,static对局部和全局变量有不同的影响。

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

作用域与生存期

·作用域与生存期每个变量都有。

·作用域以空间角度看待变量(可见性),生存期从时间角度看待变量(存在性)。

·生存期>=作用域

变量的作用域

局部变量定义:在函数内部定义或在函数内部的复合语句中定义的变量。
全局变量定义:在函数外部定义的变量。

局部变量

·不同函数中可使用同名变量。

·函数的形式参数为局部变量。

·作用域仅在该函数或复合语句中,离开后内存立即释放。

全局变量

·作用域:从定义开始到本源文件结束。

·若全局变量与局部变量同名,在局部变量的作用范围内,全局变量会被屏蔽,不起作用,而局部变量有效。此时加上::(双冒号)表示使用全局变量。

·想要在定义点之前引用该全局变量,使用extern修饰声明来扩展作用域,同样可以用它来把作用域扩大到别的文件。由于只是声明而不是定义,可以不指定类型。

·用static修饰全局变量(静态外部变量):该变量作用域只限于本文件模块。

变量的生存期

静态变量:在静态存储区内分配内存单元,整个程序运行期间都不释放。
动态变量:在动态存储区内分配内存单元,调用结束时自动释放。

局部变量

自动变量(用auto修饰,可省略)

·局部变量如果不作特殊说明都默认为auto类型。调用结束时立刻释放。

寄存器变量(用register修饰)

·存储于CPU的寄存器中。同样是调用结束后立刻释放。

静态局部变量(用static修饰)

·生存期:从程序开始到程序结束。

·分配的空间始终存在不释放。

·调用结束后仍然存在,但其他函数无法引用,因为它是一个局部变量。

全局变量

·生存期:从程序开始到程序结束。要与作用域分开(作用域:从定义开始到程序结束)。

·全局变量全都放在静态存储区中,全局变量必然是静态变量。

函数

·声明函数时使用static修饰:函数的作用域局限于所在文件。

·定义函数时用extern修饰:可供其他文件调用。(默认为extern)

注意事项

·static对局部变量和全局变量的作用是不一样的。

·对一个变量定义,明确其数据类型和储存类别。

·对变量而言,extern用在声明中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值