C语言STATIC用法

C语言STATIC用法

转自:http://blog.csdn.net/vagrantisme/article/details/4083722   

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

  2. 静态局部变量
  静态局部变量属于静态存储方式,它具有以下特点:
  (1)静态局部变量在函数内定义 它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。
  (2)允许对构造类静态局部量赋初值 例如数组,若未赋以初值,则由系统自动赋以0值。
  (3)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以 看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的 值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成 意外的副作用,因此仍以采用局部静态变量为宜。
  3.静态全局变量
  全局变量(外部变量)的说明之前再冠以static 就构 成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局 变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在 定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此 可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量 后是改变了它的作用域, 限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。
  4. static 函数…..
  内部函数和外部函数
  当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。
  1 内部函数(又称静态函数)
  如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。
  定义一个内部函数,只需在函数类型前再加一个“static”关键字即可,如下所示:
  static 函数类型 函数名(函数参数表)
  {……}
  关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。
  使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。
  2 外部函数
  外部函数的定义:在定义函数时,如果没有加关键字“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(……) /*定义外部函数*/
  {……}

转载于:https://www.cnblogs.com/aBigRoybot/archive/2011/07/13/2250863.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SIP初步

1、什么是SIP SIP(会话发起协议)属于IP应用层协议,用于在IP网上为用户提供会话应用。会话(Session)指两方或多方用户之间的语音、视频、及其他媒体形式的通信,具体可能是IP电话、会议、即时消息等等。 SIP…

execl按数值分类

LOOKUP(A1,{0,60,75,85},{"不合格","合格","良好","优秀"}) 参考文献 如何把excel中的数字转成优良中差等级_百度知道

synchronized原理_synchronized 底层原理与内存屏障

点击?蓝色“ 深入原理”,关注并“设为星标”技术干货,第一时间推送锁概述我们知道线程安全问题的产生前提是多个线程并发访问共享变量、共享资源(以下统称为共享数据)。于是,我们很容易想到保障线程安全的方法将多个线程对共享数据的并发访问…

boost helloworlld

原文地址&#xff1a; 使用环境ubuntu g安装boost只需要运行apt-get install libboost-dev libboost-dbg libboost-doc bcp libboost-*运行完毕就安装完了第一个例子,是使用boost中的lexical_cast组件的 #include <boost/lexical_cast.hpp>#include <iostream>int …

python处理ncdc气象数据并利用arcgis可视化

作者已经处理好的数据如下 中国2020年均气温数据点加栅格.zip-讲义文档类资源-CSDN下载 数据格式如下 所有文件 对2020年文件进行查看(共有412个站点数据) 打开其中一个进行查看共有12列数据

动态分区分配的“首次适应算法_动态图划分复制算法:Leopard

数据管理和系统实现课程上要分享的论文&#xff1a;《LEOPARD: Lightweight Edge-Oriented Partitioning and Replication for Dynamic Graphs》背景目前分析处理图数据已经成为一项重要的任务&#xff0c;例如&#xff0c;研究互联网结构&#xff0c;分析社会关系&#xff0c;…

应用层的信令控制协议 SIP

SIP(Session InitiationProtocol)是一个应用层的信令控制协议。用于创建、修改和释放一个或多个参与者的会话。这些会话可以是Internet 多媒体会议 [1] 、IP电话或多媒体分发。会话的参与者可以通过组播&#xff08;multicast&#xff09;、网状单播&#xff08;unicast&#x…

微软工程院院长:1万多应聘者挑不出100人

微软工程院院长&#xff1a;1万多应聘者挑不出100人“过去两三个月&#xff0c;我最主要的精力都花在了雇人上。遗憾的是&#xff0c;1万多名应聘者中&#xff0c;居然招不到足够合适的人。”今天&#xff0c;在北京中关村希格玛大厦微软亚洲工程院总部&#xff0c;新任院长张宏…

关于在pjsip中添加视频的流程说明

1. 在sdp中添加视频信息 添加sdp信息中的视频部分主要通过下面两个步骤处理。 1.1 在Invite消息的sdp中添加视频信息 主要在endpoint.c的pjmedia_endpt_create_sdp()函数中添加。具体的可以看其中的代码&#xff0c;以及代码中的注释。 注…

广义典型相关分析_重复测量数据分析及结果详解(之二)——广义估计方程

上一篇文章主要介绍了重复测量方差分析的基本思想是什么、它能做什么、怎么做、结果怎么解释&#xff0c;这几个问题。最后同时指出重复测量方差分析还是有一定局限&#xff0c;起码不够灵活。所以本文在上一篇文章基础上继续介绍医学重复测量数据中第二种常用方法&#xff1a;…

在线取色器-转

在线取色器-转来源于网易博客转载于:https://www.cnblogs.com/luren/archive/2011/07/24/2115366.html

机器学习复制粘贴笔记要点

逻辑回归对特征的规模很敏感。重新调整数据使每个特征的均值为 0 和方差为 1 通常被认为是好的做法 zip() 函数用于将可迭代的对象作为参数&#xff0c;将对象中对应的元素打包成一个个元组&#xff0c;然后返回由这些元组组成的列表。 如果各个迭代器的元素个数不一致&#x…

YUV422格式信号格式(以备学习之用)

YUV信号有很多种&#xff0c;一般YUV420和YUV422用的比较多&#xff0c; YUV422格式&#xff0c;又分为很多小类&#xff0c;按照U、V的排列可以有YUYV,YVYU,UYVY,VYUY四种&#xff0c;其中&#xff0c;YUYVY一般又称作yuv2格式。 而这四种YUV422格式&#xff0c;每种又可以分为…

excel怎么添加diy工具箱_这些Excel插件让你的Excel更好用!

Excel基本功不扎实临时学习也没时间这时候比起各种操作技巧Excel插件更实际更能切实提高你的效率今天就给大家推荐几款插件&#xff01;方方格子说起Excel插件&#xff0c;就不能不提到它。方方格子支持Excel2007到2016各版本&#xff0c;而且对于WPS版本&#xff0c;也有专门的…

隐藏实施过程

在“库”之类的程序的设计中&#xff0c;只有部分的代码是公布给使用者的。可以通过访问权限的控制来实现。 “库”是由一个一个的“包”组成的&#xff0c;用“package”打包&#xff08;这句话必须在非注释的第一行&#xff09;&#xff0c;而使用者用“import”引入就可以了…

Arcgis自下而上从左到右进行编号

添加字段xmin和ymax !shape.extent.Xmin! !shape.extent.Ymax! 计算结果 对处理好的矢量按这个两个字段进行排序 排序结果后的objectid即可做为斜坡单元编号&#xff08;如果项目中对编号有其他要求&#xff0c;请继续往下查看&#xff0c;如果没有的话&#xff0c;就不用往下…

Linux之V4L2基础编程

1. 定义 V4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。 2. 工作流程&#xff1a; 打开设备&#xff0d;> 检查和设置设备属性&#xff0d;> 设置帧格式&#xff0d;> 设置一种输入输出方法&#xff08;缓冲 区管理&#xff09;&…

ArcGIS如何在一个矢量上用不同颜色进行标注

在图层属性--标注里 选择“定义要素类并且为每个类加不同的标注” 点击添加 在类里面就会选择红色&#xff0c;此处作者添加了红色和黑色两个类 注意选择类是&#xff0c;查看是否标注次类 点击SQL查询&#xff0c;不同类进行不同的SQL查询