当前位置: 首页 > news >正文

C语言-static的用法

1、static 关键字

C 语言中 static 关键字修饰变量和函数

static有三种不同的用法:

   1.修饰局部变量;

   2.修饰全局变量;

   3.修饰函数

局部变量:当函数第一被调用,函数中的静态局部变量被初始化,再次调用这个函数,这个 static 变量也不会再次被初始化,仍是保存的前一次函数调用时的结果。 (作用域不变,生存期改变)

全局变量: static 说明的全局变量只可以在当前 c 程序文件中使用(作用域收到限制,生存期不变)。函数: static说明的函数只可以在当前 c 程序文件中使用 (作用域收到限制,生存期不变)。

全局变量:定义在函数外部的变量 (尽量少用,不安全)
局部变量:定义在函数内部的变量,包括形参
链接属性:针对多文件,一个文件的符号(变量,函数)是否可以被其它文件所见
头文件:存放函数的声明
源文件:存放函数的实现

2、局部变量介绍:

示例1: 

 

运行结果: 

 

 示例2:

#include<stdio.h>void Fun()
{static int a = 0;//第一次定义时执行,以后再来时不执行,考试重点a++;printf("%d\n",a);
}
int main()
{//int a =  10;//printf("%d\n",a);for(int i=0;i<10;i++){Fun();}return 0;
}

运行结果:

       局部变量的生命周期就是其所在的那个局部范围,简单来说就是进这个范围变量就创建,出这个范围变量就销毁。

       因为static修饰的变量在一个程序只会执行一次,之后就不会发生改变了。本质上是因为static修饰的局部变量存储位置改变了,局部变量是存储在栈区内,而静态变量则是存储在静态区内。而这种改变带来的影响就是使得局部变量的生命周期变得和整个程序一样长,即:局部变量出了其作用域也将不会销毁,除非程序结束。值得注意的是虽然局部变量的声明周期得到了很大的提升,但他的作用域没有发生任何的改变,还是只能在那个局部的范围内使用。
  

内存大致上被划分为三个区域:栈区,堆区,静态区。

3、 全局变量介绍:

全局变量在不同的源文件中是可以使用的,只不过需要先用extern外部声明一下。

#include<stdio.h>//全局变量介绍
int g_a = 10;//全局变量,从定义开始直到文件结尾都能使用
int g_b;//全局变量未初始化,系统自动初始化为0
//extern int  g_c;//引用外部符号
//extern int g_d;void Fun()
{printf("%d\n",g_a);
}int main()
{printf("%d\n",g_a);Fun();printf("%d\n",g_b);//	printf("%d\n",g_c);
//	printf("%d\n",g_d);return 0;
}

运行结果如下:

 全局变量是具有外部链接属性的,而static修饰的全局变量的时候就把这个外部链接属性变成了内部链接属性

4、总结

局部变量被static修饰时生命周期将变得和整个程序一样长,但作用域并没有变化。而static修饰全局变量和函数时,就只能在该源文件内部使用,将于外部隔绝起来。

http://www.xdnf.cn/news/833869.html

相关文章:

  • 网络安全人士必备的30个安全工具
  • RedHat 下载地址
  • 查看iOS中app的bundleId
  • 国标二阶段VIR消息集调试总结
  • 深度剖析单点登录流程原理,从0带你手写一个SSO
  • 【C语言】每日一代码:最大公约数
  • 共享开源地址
  • 学Python要是这几个网站都不知道,真的就白学了
  • 网络性能测试工具Iperf/Jperf解读
  • python批量下载csdn文章
  • OpenGLES系列demo之框架简介
  • C++中istringstream、ostringstream、stringstream 的用法
  • 《apue》 首次拜读完经典之作,两三记录
  • 【知识整理】MySQL数据库开发设计规范
  • parentNode和offsetParent的使用
  • simulink仿真技术简介
  • 延迟加载(Lazyload)三种实现方式
  • 2024年最全速看!成为黑k必看13个网站,简称网站大全!_红黑联盟官方网站,2024年最新看看这篇文章吧
  • log4cpp初入门
  • linux查看7799端口使用情况,OEM12C安装文档
  • 使用Flash_TooL软件刷机Android 手机步骤
  • ADODB 使用说明
  • Manifest文件详解
  • IF函数超实用的12种经典用法
  • 函数PostEvent、triggerevent详解
  • 八款好用的浏览器兼容性测试工具推荐
  • 【深度学习】【机器学习】用神经网络进行入侵检测,NSL-KDD数据集,基于机器学习(深度学习)判断网络入侵,网络攻击,流量异常
  • 想染指系统架构?看这篇就够了
  • DevC++graphics.h库(1)库的下载与安装
  • 【windows】--- SQL Server 2008 超详细安装教程