C语言备忘录——static

  对于这个关键字我一直没有弄清楚,今天特地去花了一定的时间去理解这个关键字。在函数或变量声明时,在数据类型前加上 static 后会有以下几个效果

  一、用于函数定义时:

    1、函数的链接属性会被修改,从extrenal 变为internal

    2、函数的存储类型与作用域不受影响

  二、用于变量声明时:

    1、将变量的存储类型从自动变成静态

    2、链接属性和作用域不受影响

    3、生命周期将被延续到整个程序结束

  三、最重要的一点:

    无论是函数还是变量,一但被冠上static 那么他们只能在被声明的文件中访问!

针对2.3我特别举个栗子:  

 1 #include <stdio.h>
 2
 3 int fun(void);
 4
 5 int main(void)
 6 {
 7     ……
 8     fun();
 9     ……
10     return 0;
11 }
12
13 int fun()
14 {
15   static int a;
16    ……
17 }

  这里如果 fun 中的 int a 没有限定符static那么当fun结束后 a 就会被回收,作用域从17行开始到函数结束。但现在就不同了,变量a的声明周期从原本的函数内变成了整个程序,程序开始运行就有了变量a了,到程序结束变量a才会被回收。

  但是,但是,但是其作用作用域仍然变不变!

切记,无论是函数还是变量,static一定不会改变作用域,但一定会改变链接域!

原文地址:https://www.cnblogs.com/daker-code/p/11619631.html

时间: 2024-11-04 08:00:21

C语言备忘录——static的相关文章

黑 马 程 序 员_视频学习总结&lt;C语言&gt;----07 static和extern关键字、typedef

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.外部函数 外部函数:如果在当前文件中定义的函数允许其他文件访问.调用,就称为外部函数.C语言规定,不允许有同名的外部函数 二.内部函数 内部函数:如果在当前文件中定义的函数不允许其他文件访问.调用,只能在内部使用,就称为内部函数.C语言规定不同的源文件可以有同名的内部函数,并且互不干扰. 三.static.extern与函数的总结 1.在定

Go语言备忘录:基本数据结构

本文内容是本人对Go语言的变量.常量.数组.切片.映射.结构体的备忘录,记录了关键的相关知识点,以供翻查. 文中如有错误的地方请大家指出,以免误导!转摘本文也请注明出处:Go语言备忘录:基本数据结构,多谢! 参考书籍<Go语言圣经>.<Go语言实战>.<Go语言学习笔记>等 一.变量 变量是一段或多 http://pic.cnhubei.com/space.php?uid=2732&do=album&id=963169http://pic.cnhubei

【学习笔记】【C语言】static和extern对函数的作用

如果一个程序中有多个源文件(.c),编译成功会生成对应的多个目标文件(.obj),这些目标文件还不能单独运行,因为这些目标文件之间可能会有关联,比如a.obj可能会调用c.obj中定义的一个函数.将这些相关联的目标文件链接在一起后才能生成可执行文件. 外部函数:如果在当前文件中定义的函数允许其他文件访问.调用,就称为外部函数.C语言规定,不允许有同名的外部函数.内部函数:如果在当前文件中定义的函数不允许其他文件访问.调用,只能在内部使用,就称为内部函数.C语言规定不同的源文件可以有同名的内部函数

一起talk C栗子吧(第一百二十六回:C语言实例--static关键字)

各位看官们,大家好,上一回中咱们说的内置宏的例子,这一回咱们说的例子是:static关键字.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,C语言提供了static关键字,它经常出现在变量或者函数的最前面,为什么要加上它呢?它主要有什么作用呢?今天我们一起来了解static关键字. 在介绍之前,我们先做一些铺垫.主要是介绍一下变量或者函数的生命周期和作用域. 变量和函数的生命周期 所谓的生命周期就是指变量或者函数在程序中可以被使用的时间,它是一段时间,可能是一分钟或者一小时等.生命周

c语言中用static修饰的函数与普通函数的区别

C程序一直由下列部分组成:1)正文段——CPU执行的机器指令部分:一个程序只有一个副本:只读,防止程序由于意外事故而修改自身指令:2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里.3)非初始化数据段(bss段)——在程序中没有初始化的全局变量:内核将此段初始化为0.4)栈——增长方向:自顶向下增长:自动变量以及每次函数调用时所需要保存的信息(返回地址:环境信息).5)堆——动态存储分. 在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量.1)内存中

C语言之Static

1.全局静态变量 在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量. 1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在) 2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(如果不是静态变量则是任意值) 3)作用域:全局静态变量在声明他的文件之外是不可见的.准确地讲从定义之处开始到文件结尾可见,在其他文件中是不可见的. 看下面关于作用域的程序: Test01: static int num = 10; void demo(){ printf("%

C语言,static

术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量.随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数.为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义.最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同). static变量: static局部变量: 在局部变量之前加上关键字static

C语言 const, static, static const 的区别

基本定义: const  就是只读的意思,只在声明中使用;static 一般有2个作用,规定作用域和存储方式. 对于局部变量, static规定其为静态存储方式, 每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;对于全局变量, 如果以文件划分作用域的话,此变量只在当前文件可见; 对于static函数也是在当前模块内函数可见.static const 应该就是上面两者的合集. PS:1. 全局const,只读的全局变量,其值不可修改.static,规定此全局变量只在当前模块(文件)中可

【学习笔记】【C语言】static和extern对变量的作用

 1.全局变量分2种: 外部变量:定义的变量能被本文件和其他文件访问 1> 默认情况下,所有的全局变量都是外部变量 1> 不同文件中的同名外部变量,都代表着同一个变量  内部变量:定义的变量只能被本文件访问,不能被其他文件访问 1> 不同文件中的同名内部变量,互不影响  static对变量的作用: 定义一个内部变量  extern对变量的作用: 声明一个外部变量  static对函数的作用: 定义和声明一个内部函数  extern对函数的作用: 定义和声明一个外部函数(可以省略) 2.代