C语言深度剖析--读书笔记2_static关键字

static 关键字

c语言中,static关键字可以修饰变量,也可以修饰函数

 

修饰变量:

    变量分为全局变量和局部变量。全局变量在内存的静态区,局部变量在内存的堆栈区。所以static修饰的变量又分为:静态全局变量和静态局部变量

 

静态全局变量:

    静态全局变量,作用域仅限于变量被定义的文件之中,在外部文件中,即使使用extern声明,也无使用之

    另外,对于全局变量(包括静态全局和普通全局)所在的文件中,如果希望在全局变量定义之前的位置使用之,亦要通过extern声明

 

如下代码:

extern int a; //这里就是一个声明语句,而非定义语句(具体见note1)。

 

void fun3()

{

    printf("a is %d\n",a);

}

static int a=10;//注意:静态全局变量a,定义在fun3函数后面。

                          //fun3函数若想使用全局变量a,必须在之前使用extern声明一下。

 

静态局部变量:

    静态局部变量,定义在函数体内部的静态变量。只有该函数能够访问此变量,同一个文档的其他函数都无法访问之。

    同时,静态局部变量在内存的静态区(这一点不同于普通局部变量),所以当函数体运行结束后,此静态变量的值不会被销毁,下一次执行该函数时仍可以用到上一次结束时的值

 

如下代码:

void fun1(void)

{

    static int i=0;    //在第二次执行fun1函数的时候,编译器发现变量i已经存在静态区,那么什么也做。不会对i再赋值为0

    i++;                                                                                                                     //这样每执行一次,i的值都被加1,且得以保存

    printf("i is %d\n",i);

}

 

int main()

{

    int k;

    for(k=0;k<10;k++)

    fun1();

}

函数执行的结果

i=1

i=2

i=10

 

如果把上面的代码改为如下:

void fun1(void)

{

    static int i; //第二次执行的时候,编译器发现i已经在内存中,那么什么也不做。

    i=0;            //i的值修改为0这样每执行一次,i的值都被清0,所以结果与上面有所不同

    i++;                       

    printf("i is %d\n",i);

}

int main()

{

    int k;

    for(k=0;k<10;k++)

        fun1();

}

函数执行的结果

i=1

i=1

i=1

 

 

 

修饰函数:

    静态函数,作用域仅限于本文件中。

这样做的好处:在一个项目中,涉及到多个文件,大家分别开发,可能会出现各自定义的函数名冲突。如果使用静态函数,那么不必担心自己定义的函数会和其他文件中的函数重名

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值