Chinaunix首页 | 论坛 | 博客
  • 博客访问: 335787
  • 博文数量: 124
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 321
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-04 16:09
文章分类

全部博文(124)

文章存档

2014年(124)

分类: C/C++

2014-08-04 23:03:05


C语言中 static 关键字有多种作用,它可以修饰变量和函数,在作用不同对象时有不同的效果。下面分别介绍 static 修饰 全局变量局部变量 和 函数 的作用/效果。

static 修饰变量:
被 static 修饰的变量将被存储到 静态存储区静态存储区内变量在整个程序运行期间都 存在/有效),但其作用域不会扩展。    
修饰局部变量的作用:    
  1> 静态局部变量 存储于静态存储区,在程序整个运行期间都不释放(扩展生命周期,但作用域未变)。自动变量 存储在动态存储区空间函数调用结束后即释放
  2> 静态局部变量 赋初值是在编译时进行,即只赋初值一次在程序运行时它已有初值以后每次调用函数时不再重新赋初值,只是保留上次函数调用结束时的值。
  3> 如果在定义局部变量时不赋初值的话编译时自动赋 “0” 初值。(有些编译器不赋初值会警告,不同编译器情况有所不同。建议定义静态变量时还是立马附上初值,规范编程)
注:值得注意的是,虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中它是“不可见”的。即被static修饰过的局部变量 作用域不会改变

点击(此处)折叠或打开

  1. #include<stdio.h>

  2. int fun()
  3. {
  4.         static n = 0;   //只被初始化一次
  5.         n++;            //在fun()函数中的 n 覆盖 main 中的 n 。
  6. return n;
  7. }

  8. int main()
  9. {
  10.         int i, n = 1;
  11.         for (i = 0 ; i < 3; i++)
  12.         {
  13.                 printf("fun()_n:%d , main_n: %d \n", fun(), n);
  14.         }
  15. return 0;
  16. }
            运行结果如下:
            fun()_n:1 , main_n: 1 
            fun()_n:2 , main_n: 1 
            fun()_n:3 , main_n: 1 


修饰全局变量的作用:
   1> 被 static 修饰的全局变量其作用域将被”限制”。静态全局变量不能在其他源文件内被调用。(简单的说就是“隐藏”)
   2> 初值赋予属性与静态局部变量相同。

注:若程序由一个源文件构成时,全局变量与全局静态变量没有区别

static 修饰函数:
static修饰函数的作用类似修饰全局变量的“限制”作用。被定义为静态的函数将不能被其他原文件调用,即被"隐藏".利于函数的封装和防止函数名污染
阅读(1280) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~