前言:祝各位程序员们1024快乐,技术越来越牛,也希望明年的今天回过头来和今天对比能骄傲的说:“我变的很牛了!”,话不多说,今天先奖励自己写一篇文章^_^

在c语言中:
static是用来修饰变量和函数的

1.修饰局部变量-称为静态局部变量

2.修饰全局变量-称为静态全局变量

3.修饰函数-称为静态函数

一、修饰局部变量

这里我们先上代码

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

这里打印10个2,原因:当第一次出函数时,i 存储的数据就释放了,也就是说第二次进入函数时,i重新创建还是会等于1。以此类推将会全部打印2。

那我们在其前面加上static会发生什么样的改变呢。

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

这里的结果为2 ~ 11,使用static修饰局部变量 i 后,使其变为静态局部变量,也就是出了y函数后 i 存储的数据没有被释放, 第二次进入时 i 就为2了,经过 i++后打印变为3,最后打印2~11。

在内存中有栈区、堆区、静态区。局部变量储存在栈区中,全局变量和静态变量储存在静态区中。

用static修饰局部变量,其实就是改变了变量的存储类型,使其从栈区存储变为静态区,使静态的局部变量出了作用域也不被释放,生命周期也变的和全局变量一样,都是程序结束后才释放。所以上面静态局部变量 i 出了作用域后并没有被销毁,而是存储在静态区中。这里需要注意的是就算 i 变为了静态局部变量,但其作用域并没有发生改变,只能在函数y内使用。

二、修饰全局变量

这里我们可以看到创建了两个源文件,(想要在另一个文件中调用其全局变量需要加extern +类型 +名字 ,这里博主前面也讲过了),这样打印的值为20。那我们加上static会变成怎么样呢

这里编译器报错了,这是因为一个全局变量在整个工程的内部文件中具有外部链接属性,用static修饰全局变量时,使其变为静态全局变量,也使全局变量的外部链接属性变为内部链接属性,这个全局变量只能在自己的源文件下使用。可以理解成公共厕所变为了私人厕所,与外界失去了联系(哈哈)。这样在另一个文件就用不了这个全局变量了,当然全局变量age还是可以在自己的文件中使用,例子如下:

三、修饰函数

其实static修饰函数和修饰全局变量很相似

这里我们可以看到函数能正常的使用,那当我们在test2.c中函数后加static呢

可以看到这里报错了,这里的原理和全局变量是一样的,函数本身就具有外部链接属性,当使用static修饰时使其的外部链接属性变为内部链接属性,从而使函数Add只能在自己的源文件中使用,不能再工程的其他内部源文件使用。

好了今天介绍的static关键字就到这里了,如果发现错误和不足的地方请各位大佬指出,现在这里谢过各位啦。

(C语言篇)static关键字相关推荐

  1. 【C语言】 Static关键字的用法和详解(太细了!!!)

    文章目录 目录 前言 一.static是什么 二.static的用法 1.修饰局部变量 2.修饰全局变量 3.修饰函数 总结 前言 static在不同的语言中又有不同的使用方法,本文介绍的是stati ...

  2. C语言之static关键字详解

    目录 前言: 一.几个概念 1.变量 2.局部变量和全局变量 3.变量的作用域 4.变量的生命周期 二.static关键字的作用 三.static关键字修饰局部变量 四.static关键字修饰全局变量 ...

  3. 从内存分配角度分析c和java里的static 关键字.

    即使作为Java的初学者, 对this 和 static 这两个关键字都不会陌生. 其实也不难理解: this 关键字:  指的是对象的本身(注意不是类本身)  跟.net 语言的Me 关键字类似. ...

  4. c 函数多次声明_【C语言】- static和extern关键字 - 对函数的作用!

    不同类型的变量有不同的存储类型.不同的生命周期.不同的作用域.这篇小文介绍2个比较重要的关键字:static和extern. static和extern不仅可以用在变量上,还可以用在函数上.这讲先介绍 ...

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

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

  6. 【让你从0到1学会C语言】指针/数组传参以及static关键字

    作者:喜欢猫咪的的程序员 专栏:<C语言> 喜欢的话:世间因为少年的挺身而出,而更加瑰丽.                                  --<人民日报> ...

  7. C语言的一个关键字——static

    C语言的一个关键字--static Static在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数. 1.Static修饰变量 按照作用范围的不同,变量分为局部变量和全局变量.如果用stati ...

  8. java基础提升篇:Static关键字

    Static变量 static关键字 在类中用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时初始化,对于该类的所有对象来说,static成员变量只有一份. 可以通过引用或 ...

  9. C语言函数内static关键字 疑惑

    static关键字有两类使用:函数外使用和和函数内使用,其中函数外使用主要用来限制被修饰的函数或变量作用域为本文件,没什么可多说的,下面重点说一下static关键字在函数体内的用法. 如下面的代码: ...

最新文章

  1. AppCompatActivity与toolbar的结合
  2. 信息系统项目管理师全国通用吗
  3. Tomcat学习笔记01【Web相关概念、Tomcat基本操作】
  4. 5渲染判断if_React 16 渲染流程
  5. [JavaScript] js 判断闰年
  6. Python使用itchat获取微信好友
  7. Discuz! Database Error(2003) notconnect 问题解決
  8. 上线了!游戏企业防沉迷落实情况有了举报平台
  9. ROS:launch文件的语法规范
  10. Logisim元件用法详解五:Memory 储存库
  11. 独立站运营成败,7个细节不可忽视
  12. azure kinect 深度相机原理
  13. matlab中zeros和ones函数使用方法
  14. 一梦江湖获取服务器信息一直获取不出来,一梦江湖手游4月10日更新汇总-一梦江湖手游4月10日更新内容有哪些_牛游戏网...
  15. Javascrit通过百度地图API获取客户端IP、地址
  16. 创建采购订单BADI流程
  17. 练习-Java多路分支之月份天数计算
  18. Matlab/Simulink-S-function函数(MATLAB版本2020a)
  19. auto install pkgs
  20. 在某个下午,拉开折叠屏交互的时代大幕

热门文章

  1. 使用python调用minitab_Minitab小技巧: 解决Python错误的快速提示
  2. 百万级并发mysql架构
  3. 1500V直流系统如何计量电能?
  4. java+socket 简易聊天工具
  5. 音频如何分割成两段音频?这些实用方法值得收藏
  6. 以太网广播TCP/IP对讲系统中的副音箱增加对讲功能的方案
  7. WakeData完成数千万人民币A轮融资,由红杉资本中国基金领投
  8. 态度决定一切,细节决定成败!
  9. ES6:export default 和 export 区别
  10. 【pen200-lab】10.11.1.141