原创 static的用法

2008-3-31 21:20 5544 10 10 分类: 软件与OS
static的含义如果不仔细去体会下,常常会吃不准,就是现在知道了,过段时间也经常会忘记。现在总结下贴在这里作个备案
1.在C中的含义
a.对于一个声明为static的局部变量,它的生存周期会扩大,即具有“记忆性”:指在两次函数调用时, 在第二次调用进入时, 能保持第一次调用退出时的值.
例子:
void func(void)
{
   static int i="0";
   printf("static i=%d\n",i);
   i++;
   //.............
   //.............
}

void main(void)
{
    func();
    func();
    //......
}
将输出:static i="0"
        static i="1"
相对于生存周期的扩大,在C中定义一个局部变量为static还有下面两个含义:
b.变量的存储空间不同:普通的局部变量存储在动态存储空间(heap or stack),static则保存在静态存储区,在程序整个运行期间都不释放,所以才会在函数两次调用之间具有记忆性
c.static局部变量在所处模块在初次运行时进行初始化工作, 且只操作一次;而且对于static变量如果程序员没有给它赋值,编译器会自动赋初值0或空字符, 而普通变量的初值是不确定的
对于全局变量或函数如果声明为static的,则表示它只能在本模块(常常就是指本文件)范围内有效,即它的作用范围限定在本模块内,其他模块不能引用。
例子:
file1.c
static int g_nCnt=0;
//............
static void func1(void)
{
//......
}

file2.c
extern int g_nCnt;//错误,不能引用
extern void func1();//错误,不能引用
void func2(void)
{
  func1();//错误,不能引用
}

2.在c++中的含义
在c++中除了前面的含义外,还有一种情况:就是对于类的成员变量或函数,如果声明为static,则表示“The static keyword denotes that a member variable, or method, can be accessed without requiring an instantiation of the class to which it belongs.”
也就是说static的成员不需要实际的对象来引用,它是属于这个类,而不是属于单独哪个对象。
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /3 下一条