C里Static用法小结

本文详细解释了C语言中static关键字的两种主要用途:局部静态变量和外部静态变量/函数。局部静态变量相较于普通局部变量拥有整个程序运行周期的生存期,并且只初始化一次。外部静态变量则用于限制全局变量和函数的作用域,使其只能在当前文件中可见。

 

 C真的已经差不多忘光了,看了几章K&R的CPL看得云里雾里的。发现某处写着:...,which can be declared static in the source file... thus be invisible outside it,忽觉很惊奇,static竟还有对外不可见的意思,竟然一点点印象都没有了。故google了一下C里面的static的用法。好吧,我得说,英文书我看一遍真的看不到什么东西,看来以后还得再翻看一遍。

 

  static关键字,在C里主要有两种用法(C++/JAVA里还有静态成员的意思):

  (1)局部静态变量

  (2)外部静态变量/函数

 

  一、局部静态变量:

   与auto类型(普通)局部变量相比, static局部变量有三点不同

    1. 存储空间分配不同
         auto类型分配在栈上, 属于动态存储类别, 占动态存储区空间, 函数调用结束后自动释放, 而static分配在静态存储区, 在程序整个运行期       间都不释放. 两者之间的作用域相同, 但生存期不同。
    2. static局部变量在所处模块在初次运行时进行初始化工作, 且只操作一次;故若其所在的函数每次被调用时static变量的值只会初始化一次     且其具有记忆功能。
    3. 对于局部静态变量, 如果不赋初值, 编译期会自动赋初值0或空字符, 而auto类型的初值是不确定的。

 

  二、外部静态变量/函数

    在C中static有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。

    此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。注意此时, 对于外部(全局)变量, 不论是否有static限制, 它的存储区域都是在静态存储区, 生存期都是全局的. 此时的static只是起作用域限制作用, 限定作用域在本模块(文件)内部.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值