原创
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的成员不需要实际的对象来引用,它是属于这个类,而不是属于单独哪个对象。
文章评论(0条评论)
登录后参与讨论