Chinaunix首页 | 论坛 | 博客
  • 博客访问: 157638
  • 博文数量: 76
  • 博客积分: 1513
  • 博客等级: 上尉
  • 技术积分: 755
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-25 15:15
文章分类

全部博文(76)

文章存档

2012年(2)

2011年(74)

我的朋友

分类: C/C++

2011-11-25 19:53:53

C语言中static 用法总结

                                       

 

1. 全局静态变量

 

   在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。

 

   1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)

 

   2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)

 

   3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。

 

 

定义全局静态变量的好处:

 

<1>不会被其他文件所访问,修改

 

<2>其他文件中可以使用相同名字的变量,不会发生冲突。

 

2. 局部静态变量

 

  在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。

 

  1)内存中的位置:静态存储区

 

  2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)(某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置0,然后把不是0的几个元素赋值。如果定义成静态的,就省去了一开始置0的操作。再比如要把一个字符数组当字符串来用,但又觉得每次在字符数组末尾加‘\0’太麻烦。如果把字符串定义成静态的,就省去了这个麻烦,因为那里本来就是‘\0’。

  3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

 

  注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。(简单来说, 全局静态或者局部静态变量,从初始化开始一直存在直到程序结束, 也就是说静态变量只被初始化一次。

例如:

  1. #include <stdio.h>

  2. #include <stdlib.h>

  3. void out(){

  4.        staticint cnt = 2;

  5.        printf("%d\n",cnt++);

  6. }

  7. int main(void) {

  8.        inttime = 4;

  9.        while(time--> 0)

  10.               out();

  11.        return0;

  12. }

OUTPUT:

2

3

4

5

 

     static用来修饰全局变量的时候,它就改变了全局变量的作用域(在声明他的文件之外是不可见的),但是没有改变它的存放位置,还是在静态存储区中。

 

3. 静态函数

 

定义静态函数的好处:

 

<1> 其他文件中可以定义相同名字的函数,不会发生冲突

 

<2> 静态函数不能被其他文件所用。

C/C++语言中static的用途

 

2008年07月20日 星期日 11:09

1. 用于声明函数的可视范围。
使用static 声明的函数只能在本编译单元内可见,即本文件。此时与extern相对。
2. 用于声明局部变量。
    用static声明的局部变量在第一次调用所在函数时被初始化一次,退出该函数后static变量被保护,即下次调用该函数时,该变量的值与上次调用退出时的值相同。static局部变量的生存期与全局变量一至,但可见性不一样。
在C++语言中static具有更多含意和用途。
3. 定义类的成员变量称静态成员变量。
该变量被类的所有对象(实例)所公有,该变量只有一个副本,所有对象均可访问
4. 定义类的成员函数称静态成员函数。
   调用该函数时不需要实例化对象,可以通过该类的类名直接调用。在静态成员函数中只能调用其它的静态成员函数,或使用静态成员变量。

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