【每日一C之八】C语言static用法

 每日一C之static用法


       每天一个C语言贝壳厚积薄发积跬步以致千里

 今日贝壳:C语言static的用法与static修饰变量的空间存储特征。
           要点: static在C中主要有两个作用,一修饰作用域;二修饰生存期
                    1.static修饰全局变量:修饰作用域
                                 static修饰的静态全局变量与普通全局变量唯一的区别是:静态全局变量仅在此源文件中有效,不能被其他源文件引用。该全局变量的作用域被限定在此源文件。
                    2.static修饰函数:修饰作用域。
                                 static修饰的函数,作用域仅在此源文件,不能在其他源文件中调用。该函数的作用域被限定在此源文件。
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
            
            
//*******
//file1.c文件代码如下
//*******
static int n = 10 ; //静态全局变量
static void foo () //静态函数
{
printf ( "Hello world !" );
}
....
//*******
//file2.c
//*******
extern int n ; //extern声明使用file1中的n,引发错误,因为n为static静态全局变量
//如果n未用static修饰,通过extern可引用file1.c中的n
extern void foo (); //同上,引发错误,静态函数作用仅在其源文件内
....
 来自CODE的代码片
static1.c
                     3.static修饰局部变量:修饰生存期
                                  static修饰的静态局部变量,同普通局部变量的区别:
  • 静态局部变量存储在静态区,普通局部变量存储在栈区。
  • 静态局部变量未初始化时,系统自动置0;初始化仅在函数初次调用时进行一次
  • 静态局部变量在函数结束时不会释放,其生存期为整个程序运行期,并能保存上次调用的值。
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
             
             
#include<stdio.h>
void foo ()
{
static int counter = 0 ; //仅在初次调用foo()时初始化
printf ( "counter:%d" , counter );
counter ++ ;
}
int main ()
{
foo (); //第一次调用foo(),counter输出0
foo (); //第二次调用foo(),counter输出1
return 0 ;
}
 来自CODE的代码片
static2.c
 去掉static再运行一下程序,结果不同


                      Have a nice day !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值