C/C++变量存储类别 静态存储区/动态存储区/程序代码区 static的使用含义

变量的存储类别


  1. 从变量的作用域可以将变量分为全局变量和局部变量。
  2. 从变量的生存期(变量的存在时间)角度来划分,可以分为“静态存储变量”和“动态存储变量”。

第二种方式带来了“静态存储方式”和“动态存储方式”两个概念

首先先介绍一下程序在内存空间的分配情况

程序代码区静态存储区动态存储区

存储区可以理解为内存,程序在整个运行期间所需要的数据就放在静态存储区和动态存储区中。
很容易知道全局变量是存储在静态存储区的,在程序运行期间全局变量所占的存储空间是固定不变的,不是动态分配与释放的。


那么什么样的数据存储在动态存储空间里呢?


有以下三种情况:
(1) 局部变量。
(2) 函数形参(函数形参可以理解为局部变量)
(3) 调用函数时现场的一些数据和返回地址等。

这些数据均是存储在动态存储空间里的。对于第三点需要说明的一点是:子函数在调用时开始分配内存空间(包括子函数里的局部变量),调用结束后这些内存空间就会被释放掉。且是动态分配和释放的。所以,即使是同一个子函数多次调用时,分配的存储空间也可能是不一样的。


那么可以让局部变量的值在函数调用后依然存在呢?


答案是肯定的。这里就需要用到关键字–static。只需要将局部变量用static声明一下即可。先看下面的程序:


#include <stdio.h>

int fun_sta()
{
	static int val = 0;
	val++;
	return val ;
}
int main() 
{
	int reval = 0,i;
	for(i; i<4; i++)
	{
		reval = fun_sta();
		printf("static声明后返回的变量值为:%d\n",reval);
	}		
	return 0;
}

运行的结果如下:


static


可见局部变量 val 的值并不是在每一次调用子函数 fun_sta() 时 都会被初始化。实际上用static声明的局部变量只有在第一次调用时会被初始化。即static int val = 0; 只执行了一次。如果没有初始化,默认初始化为0。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值