简介: C语言中的 static变量(全局局部)、static函数总结

文章目录

  • 本博文的简述or解决问题?
  • 同步博文:
  • static 变量:
    • 静态局部变量:
    • 静态全局变量:
  • static 函数…..:
    • 内部函数(又称静态函数):
    • 外部函数:
      • [案例]外部函数应用。
  • 开心分享:

本博文的简述or解决问题?

详情: 见简介

同步博文:

  • 本篇的csdn/github.io同步博文: C语言中的 static变量(全局和局部)、static函数总结

static 变量:

静态变量的类型 说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。 例如外部变量虽属于静态 存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。

静态局部变量:

静态局部变量属于静态存储方式,它具有以下特点:
  (1)静态局部变量在函数内定义 它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。
  (2)允许对构造类静态局部量赋初值 例如数组,若未赋以初值,则由系统自动赋以0值。
  (3)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以 看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的 值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成 意外的副作用,因此仍以采用局部静态变量为宜。

静态全局变量:

全局变量(外部变量)的说明之前再冠以static 就构 成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局 变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在 定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此 可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量 后是改变了它的作用域, 限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。

static 函数……:

内部函数和外部函数
  当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。

内部函数(又称静态函数):

如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。
  定义一个内部函数,只需在函数类型前再加一个“static”关键字即可,如下所示:

static 函数类型 函数名(函数参数表){……}

关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。
  使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。

外部函数:

外部函数的定义:在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数:

[extern] 函数类型 函数名(函数参数表){……}

调用外部函数时,需要对其进行说明:
  [extern] 函数类型 函数名(参数类型表)[,函数名2(参数类型表2)……];

[案例]外部函数应用。

(1)文件mainf.c
  main()
  { extern void input(…),process(…),output(…);
  input(…); process(…); output(…);
  }
  (2)文件subf1.c
  ……
  extern void input(……) /定义外部函数/
  {……}
  (3)文件subf2.c
  ……
  extern void process(……) /定义外部 函数/
  {……}
  (4)文件subf3.c
  ……
  extern void output(……) /定义外部函数/
  {……}

开心分享:

因为有着许许多多的热心网友的无私分享,从他们的博客中学习成长,学会很多,故也不辞辛苦也将自己的项目或经验整理成博客的形式,也提供给一起大家学习探讨与交流

转载:C语言中的 static变量(全局和局部)、static函数总结

C语言中的 static变量(全局和局部)、static函数总结相关推荐

  1. A13在c语言中是合法变量吗,C语言中局部变量和全局变量等在内存中的存放位置.doc-资源下载在线文库www.lddoc.cn...

    C语言中局部变量和全局变量_等在内存中的存放位置.doc C 语言中局部变量和全局变量 变量的存储类别static,extern,auto,register 8.8 局部变量和全局变量在讨论函数的形参 ...

  2. c语言中常见的变量,C语言中的变量详解

    先说说变量的作用域,比如,在函数中,形参变量只是在被调用期间才分配内存单元,调用结束立即释放.这就说明形参变量只有在函授内才是有效的,离开该函数就不能再使用了. 这种变量有效性的范围称为变量的作用域. ...

  3. python以下是变量合法命名的是_Python语言中以下哪个变量的命名是错误的

    [单选题]雨篷.阳台计量不正确的是( ) . [单选题]关于补体活化的MBL途径,哪项是错误的? [单选题]关于楼地面垫层的计量规则,描述错误的是( ). [单选题]根据<建设工程工程畺清单计价 ...

  4. c语言结构体成员变量私有化,C语言中结构体变量私有化详解

    C语言中结构体变量私有化详解 背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚 ...

  5. C语言中的带参宏和带参函数的区别

    C语言中的带参宏和带参函数的区别 (1) 带参函数中的形参是变量,因此有类型检查.而带参宏只是简单的字符串替换. (2) 从程序执行的过程来看,带参宏是在预处理阶段被预处理器处理的.而带参函数是在程序 ...

  6. 如何在不同开发语言中使用绑定变量_linux C/C++服务器后台开发面试题总结(编程语言篇)...

    整篇分为四部分,篇幅较长,建议先收藏. 一.编程语言 1.根据熟悉的语言,谈谈两种语言的区别? 主要浅谈下C/C++和PHP语言的区别: 1)PHP弱类型语言,一种脚本语言,对数据的类型不要求过多,较 ...

  7. C语言中常量、变量和函数

    1. 常量 常量指定的是在软件编程过程中不能给赋值且值不能被改变的量.一般包括数字.字符.字符串常量等. 例如:整型常量:12.0.-3: 实型常量:4.6.-1.23: 字符常量:'a'.'b'. ...

  8. h0在c语言中可作为变量吗,请问TMS320F2809中的L0/L1/H0 SARAM双重映射数据段和程序段的地址空间能重合吗?...

    我有以下几个问题: 1.M0.M1.L0.L1.H0(SARAM)是不是既可以当做数据段,又可以当做程序段?假如可以的话,数据段和程序段的地址空间能重合吗? 如: PAGE 0: RAML11     ...

  9. Java接口中的成员变量为什么必须是static ?

    接口的含义 接口就是提供一种统一的协议, 而接口中的属性也属于协议中的成员.它们是公共的,静态的,最终的常量.相当于全局常量. 在interface里面的变量都是public static final ...

  10. c语言静态函数调用静态变量_C语言中的静态变量和函数

    c语言静态函数调用静态变量 C中的静态变量 (Static Variables in C) Basically, when static variables are declared, they cr ...

最新文章

  1. java which语句,java入门之表达式、语句、块
  2. R使用热力图(heatmap)可视化数据集
  3. 为什么DOM操作很慢
  4. O“.NET研究”bjective-C入门
  5. 企业内网中的WSUS更新服务 服务器连接到Microsoft Update来获取更新程序
  6. 生活中的算法---公交换乘
  7. mysql show full_mysql: show full processlist 详解
  8. 112家it公司薪水
  9. mysql 记录更新 内部_MySQL 入门(1):查询和更新的内部实现
  10. 【转载】程序员技术练级攻略
  11. java源码-LinkedHashMap
  12. 【2016年第1期】关于我国农业大数据中心建设的设想
  13. PixiJS学习(9)动画序列帧
  14. Linux版本CentOS下安装svn客户端及使用
  15. 分享,iOS国家手机区号代码.plist
  16. 华为光猫虚拟服务器怎么设置,华为路由器连接光猫怎么设置
  17. SpringBoot 通用项目配置
  18. js 判断移动终端浏览器版本信息
  19. CVE-2019-11478 Sack SlownessExcess Resource Usage漏洞解析与利用
  20. vue自定义指令directives同时传递多个参数

热门文章

  1. Ubuntu环境配置机器安装驱动
  2. Elasticsearch高级查询Query DSL
  3. dsl java 语言_Java DSL简介(收集整理)
  4. 如何对类别变量进行独热编码
  5. [Java] 计蒜客---蒜头君的玩具
  6. 商城项目-了解电商行业
  7. 用c语言设计一个年历系统流程图,用C语言编写一个年历.docx
  8. 【刷题那些事】Leetcode精选二叉树例题+解析
  9. 华为,与山河共舞这支芭蕾
  10. Spring Boot - Font Awesome OTS parsing error: Failed to convert( Failed to decode downloaded font)