Chinaunix首页 | 论坛 | 博客
  • 博客访问: 192462
  • 博文数量: 73
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 1160
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-23 15:53
文章分类

全部博文(73)

文章存档

2011年(1)

2009年(72)

我的朋友

分类: C/C++

2009-04-23 17:15:10

静态变量

http://blog.csdn.net/hangmwll/archive/2009/02/10/3874215.aspx

 

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

static float f;

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

 

static int x, y;                         /*xy只是适用于本文件的全局变量*/
#include
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中定义的全局变量xy只适用于本文件,而在函数swap( )所在文件file2.c中试图将它们说明为外部变量而使用它们,这是不可能的。因此,上述程序在编译连接时会指出xy没有定义的错误。

 

 

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

#include
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
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的字符)

 

阅读(623) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~