静态变量浅析

静态变量
静态变量存放在内存中的静态存储区。编译系统为其分配固定的存储空间。静态变量定义的形式是:
static 类型标识符 变量名;
静态变量有两种:一种是外部静态变量,另一种是内部静态变量。
(1)外部静态变量。如果希望在一个文件中定义的外部变量的作用域仅局限于此文件中,而不能被其它文件所访问,则可以在定义此外部变量的类型说明符的前面使用static关键字。如:

static float f;

此时, f被称为静态外部变量(或称为外部静态变量),只能在本文件中使用,在其它文件中,即使使用了extern说明,也无法使用该变量

 

static int x, y;                         /*x与y只是适用于本文件的全局变量*/
#include <stdio.h>
main()
{        
                scanf("%d%d",&x,&y);
        swap();
        printf("x=%d, y=%d/n",x,y);
}

/*file2.c*/
extern int x, y;                /*实际上x, y没有定义*/
swap()
{        
                int t;
        t=x; x=y; y=t;
        return;
}

这一程序是错误的。这是因为,在主函数所在的文件file1.c中定义的全局变量x、y只适用于本文件,而在函数swap( )所在文件file2.c中试图将它们说明为外部变量而使用它们,这是不可能的。因此,上述程序在编译连接时会指出x、y没有定义的错误。

 

 

内部静态变量。如果希望在函数调用结束后仍然保留函数中定义的局部变量的值,则可以将该局部变量的类型说明符前加一个static关键字,说明为内部静态变量。
例8.35  编一个程序,每调用一次函数,显示一静态局部变量中内容,然后为其值加2。

#include <stdio.h>
void test_static()
{       
        static int sv=0;
        printf("static=%d/n",sv);
        sv=sv+2;
}

main()
{       
                int i;
        for(i=0;i<4;i++)
                test_static();
}

上述程序的执行结果如下:
static=0
static=2
static=4
static=6

test_static( )函数中,静态变量sv的初始值为0。但是只有在test_static( )函数第一次调用执行时sv被初始化为0,以后每次调用就不再进行初始化,而把上次的计算结果作为初始值 ,因此,两次相同的调用出现不同的计算结果。如果将sv定义为动态变量,就会出现不同的结果

 

 

#include <stdio.h>
void test_static()
{        
                int sv=0;
        printf("static=%d/n",sv);
        sv=sv+2;
}

main()
{        
                int i;
        for(i=0;i<4;i++)
                test_static();
}

上述程序的执行结果如下:
static=0
static=0
static=0
static=0

注意:
静态变量如果在定义时没有赋初始值,系统会用默认值对它进行初始化,数值变量默认初始化为0,字符变量默认初始化为空字符(即ASCII码为0的字符)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值