1.具有隐藏的作用

当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。

a.c:

char a = 'A';  //  global variable
void msg()
{printf("Hello\n");
}

main.c

int main( void)
{    extern  char a;     //  extern variable must be declared before useprintf("%c ", a);( void)msg();return 0;
}

程序的运行结果是:

A Hello

你可能会问:为什么在a.c中定义的全局变量a和函数msg能在main.c中使用?前面说过,所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。此例中,a是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的。

如果加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。

2.保持变量内容的持久

变量不加 static 修饰:

#include <stdio.h>void test()
{int num = 0;num++;printf("%d ", num);
}
int main()
{int i = 0;for (i = 0; i < 10; i++){test();}return 0;
}

输出:1 1 1 1 1 1 1 1 1 1 1

变量被 static 修饰:

#include <stdio.h>void test()
{static int num = 0;num++;printf("%d ", num);
}
int main()
{int i = 0;for (i = 0; i < 10; i++){test();}return 0;
}

输出:1 2 3 4 5 6 7 8 9 10

3.默认初始化为0(static变量)

其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。

static int x;  //初始化时x=0;

static 关键字在C++中的作用:静态成员变量和静态成员函数

C++ - 静态成员变量和静态成员函数_同学小辜的博客-CSDN博客

C语言static关键字的作用(有三个作用)相关推荐

  1. c语言 static 关键字的作用

    static 关键字的作用 全局静态变量 局部静态变量 静态函数 类的静态成员 类的静态函数 全局静态变量 在全局变量前加上关键字 static,全局变量就定义成一个全局静态变量. 静态存储区,在整个 ...

  2. C语言 Static关键字的作用详解

    前言: static 是用来修饰函数和变量的,可以修饰局部变量,全局变量以及函数 一.修饰局部变量  (称为静态局部变量) 来看俩段代码: 对于第一段代码来说,它循环5次,每次调用一下fun()函数, ...

  3. C语言学习及应用笔记之二:C语言static关键字及其使用

    C语言有很多关键字,大多关键字使用起来是很明确的,但有一些关键字却要相对复杂一些.我们这里要说明的static关键字就是如此,它的功能很强大,相应的使用也就更复杂. 一般来说static关键字的常见用 ...

  4. [C语言]static关键字--#define 定义常量和宏--初识指针--初识C语言(四)

    文章目录 前言 一,static关键字 二,#define 定义常量和宏 三,初识指针 总结 前言 本节主要记录初识C语言第四节内容. 内容包括:static关键字------#define 定义常量 ...

  5. C语言static关键字修饰变量及函数时的用法和原理

    目录 一.static关键字修饰局部变量 二.static关键字修饰全局变量 三.static关键字修饰函数 一.static关键字修饰局部变量 在内存中,往往将其分为三个区块,栈区,堆区,静态区.C ...

  6. c语言的关键字static,C语言static关键字

    1.static 全局变量与普通全局变量的区别: 在定义变量时,全局变量之前再冠以 static 就构成了静态的全局变量.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式.两者在存储方式 ...

  7. C语言static 关键字总结

    static 关键字总结: 变量可以被static 修饰,意义有发生变化吗? 下面我们看个例子: (1)变量不加 static 修饰 #include <stdio.h>void test ...

  8. c语言static关键字参数

    static 关键字. 1.static修饰局部变量: ① 整个生命周期延长, ② 静态局部变量只会被初始化一次,以后每一次调用静态局部变量,就会使用上一次调用完保存的值. ③ 只能被作用域的变量和函 ...

  9. 浅谈C语言static关键字 静态变量 函数

    目录 static对变量修饰 局部变量 全局变量 函数 static对变量修饰 局部变量 普通局部变量存储于进程栈空间,使用完毕会立即释放. 静态局部变量存储于进程的全局数据区,即使函数返回,它的值也 ...

最新文章

  1. 哪个牌子的平板电脑好_中山密码锁哪个牌子好
  2. Xamarin图表开发基础教程(1)
  3. wdcp后台重启服务器后mysql打不开
  4. 查找任意数目参数的最大值
  5. 为Mac安装homebrew
  6. STM32H743+CubeMX-定时器TIM输出PWM(PWM Generation模式)+ 中断
  7. hbase 查询_云HBase发布全文索引服务,轻松应对复杂查询
  8. SELECT语句选项
  9. 计算机专业术语的通俗解释,计算机专业术语解释
  10. oracle 11g job创建,Oracle 11g 手动创建库完整实施过程
  11. HFSS阵列天线设计与仿真3
  12. 全球与中国激光共焦扫描显微镜市场深度研究分析报告
  13. css设置logo图片大小,修改ecshop网站logo图片尺寸大小
  14. Sql server 实现增删改查
  15. vscode汇编环境配置
  16. 开源传感器网络平台OpenWSN
  17. Qt-QCustomPlot
  18. 三大报再呼救市:A股估值到了崩溃边缘
  19. 产生按指数分布的随机数----摘自csdn
  20. 小程序源码:2022强大的修复版趣味心理测试小程序源码,趣味测试引流裂变神器-多玩法安装简单

热门文章

  1. js鼠标放上去和移出事件
  2. centos 8 编译安装hyperscan
  3. 解决电脑浏览器打不开网页问题
  4. 嵌入式开发:硬件和软件越来越接近
  5. 星星之火-38:20M的LTE带宽,为什么是1200个子载波?
  6. Python如何读取Jason格式,变成dataframe
  7. 是谁在撩动着我的服务器
  8. CC2530 CC2530F256RHAR 一款ZigBee SOC芯片
  9. H3C 路由器交换机模拟器
  10. 简单句、并列句、复合句、got his wish、 owe you