c语言中的static静态变量

c语言中的static变量

前言

静态变量有一个特性,就是即使它们离开了它们的作用域,也会保留它们的值。因此,静态变量在其先前的作用域中保留其先前的值,在新的作用域中不会再次初始化。此刻,这句话听上去有些绕,请耐下心看完下面的内容,我相信读完后你会对这句话有更深的理解。

语法

static data_type var_name = var_value; 

比较

  1. 一个staticint变量在程序运行时时刻保持在内存中。普通变量或auto变量在声明该变量的函数调用结束后被销毁。
    例如,我们可以用static int定义的变量来计算一个函数被调用的次数,但使auto int不能这么使用。
#include<stdio.h>
int fun()
{
  static int count = 0;
  count++;
  return count;
}
  
int main()
{
  printf("%d ", fun());
  printf("%d ", fun());
  return 0;
}

output:

1 2
#include<stdio.h>
int fun()
{
  int count = 0;
  count++;
  return count;
}
  
int main()
{
  printf("%d ", fun());
  printf("%d ", fun());
  return 0;
}

output:

1 1

上面两个程序的结果说明,静态变量在其先前的作用域中保留其先前的值,在新的作用域中不会再次初始化。
2)static变量(如全局变量)如果没有明确初始化,则默认为0。例如,在下面的程序中,x的值被打印为0,而y的值是一些随机值。

#include <stdio.h>
int main()
{
	static int x;
	int y;
	printf("%d \n %d", x, y);
}

output:

0 
22090 

再次运行程序 output:

0
22089

第三次运行y打印的值仍与前两次不同,显然此处打印的y的值是没有意义的。
3)static变量在数据段中分配内存,而不是堆栈段。
4)在c语言中static变量只能使用常量进行初始化,但是在c++中无此限制。

参考资料:
https://www.geeksforgeeks.org/static-variables-in-c/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值