首页 > 代码库 > static关键字的作用
static关键字的作用
1:隐藏
假如一个工程中存在a.c、 b.c 以及main.c等C文件。
. 静态函数
在函数的返回类型前加上关键字static,函数就被定义成为静态函数。
(在a.c文件中的函数名前加static,则这个函数只能在a.c中调用,而不能被b.c或 main.c调用)
函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。
. 局部静态变量
在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。
1)内存中的位置:静态存储区
2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。
2 :static的第二个作用是保持变量内容的持久。
存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。虽然这种用法不常见,但我还是举一个例子。
1 #include <stdio.h> 2 3 int fun(void){ 4 static int count = 10; // 事实上此赋值语句从来没有执行过 5 return count--; 6 } 7 8 int count = 1; 9 10 int main(void)11 { 12 printf("global\t\tlocal static\n");13 for(; count <= 10; ++count)14 printf("%d\t\t%d\n", count, fun()); 15 16 return 0;17 }
如果static int count = 10; 被当做一个正常的语句执行,会在每次调用fun函数的时候都将count初始化成10,显然事实不是这样。所以这条赋值语句虽然写在那里,但其实没有在代码编译后的机器指令里存在。既然赋值语句都没有执行,它的初始值为什么会是10呢?事实上在编译阶段,就把可执行文件中为这个变量分配的静态存储区的值给赋成了10,程序在加载的时候将10直接读入内存,而不会有“赋值”这个动作了。
(3)static的第三个作用是默认初始化为0
static关键字的作用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。