static关键字的使用

static:静态

未使用static

在下列代码中变量a是有生命周期的,调用完后就会被销毁

所以for循环每次调用test函数打印的结果都是2

#include <stdio.h>

void test()
{
int a = 1;
a++;
printf("%d", a);
}
int main(){
for (int i = 0; i < 10; i++)
{
test();//打印结果2222222222
}
return 0;
}

使用static

在下列代码中变量a是有生命周期的,调用完后就会被销毁

在使用了static关键字后,变量的生命周期被改变了生命周期等于程序的生命周期(本质是改变了变量的存储位置,由原来的栈区改为了静态区,全局变量也是存储在静态区)

所以for循环每次调用test函数打印的结果都会+1

#include <stdio.h>

void test()
{
static int a = 1;
a++;//a=2
printf("%d", a);
}
int main(){
for (int i = 0; i < 10; i++)
{
test();//打印结果2,3,4,5,6,7,8,9,10,11
}
return 0;
}

有static关键词与extern关键词交互的情况

static修饰全局变量,使得这个全局变量只能在自己所在的源文件(.c)内部才可以使用,其他源文件不能使用*

全局变量能过被其他源文件内部使用,是因为全局变量具有外部链接属性

但是被static关键字修饰后,就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量

函数也是一样的情况

add.c

static int year = 2022;//声明全局变量

test.c(运行报错)

#include <stdio.h>
extern int year;//使用extern关键字从add.c源文件中声明外部符号的全局变量
int main(){
printf("%d", year);//会报错
return 0;
}

最新文章

  1. Cmder--Windows下命令行利器
  2. C#中as用法
  3. jquery radio取值,checkbox取值,select取值及选中
  4. PHP 开发社区微信服务号实战图解
  5. Memcache的安装
  6. .Net连接到SAP【转载】
  7. iOS定位 - 普通定位(没有地图) - 反地理编码(得到具体位置)
  8. 创建高安全性PHP网站的几个实用要点
  9. Java在mysql插入数据的时候的乱码问题解决
  10. Linux系统编程(15)——shell脚本语法
  11. mysql报错ERROR 2003 (HY000): Can&#39;t connect to MySQL server on &#39;localhost&#39; (10061)
  12. 虚函数表:QT5与VS2015的差异
  13. Python学习基本小练习
  14. crm开发之用户重置密码
  15. 20165230 2017-2018-2《Java程序设计》课程总结
  16. Asp.net中的web.config配置
  17. JavaScript实现大整数减法
  18. oracle同义词语句备份
  19. CSS 图像拼合技术
  20. 系列文章--一步一步学Silverlight2

热门文章

  1. Java入门与进阶P-3.7+P-3.8
  2. TamperMonkey油猴脚本获取
  3. Python标准库pathlib及实例操作
  4. IDEA创建新的模块springboot
  5. MySQL数据库报1055错误
  6. .net core 阿里云接口之将指定的OSS文件下载到流
  7. Eureka、Consul、Zookeeper注册中心总结
  8. dotnet 缓存
  9. TCP/IP协议(7): NAT(Network Address Translation) —— 解决 IPv4 地址短缺的问题
  10. Blue Mary开公司