Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / C语言static用法

每天拾一个C语言贝壳,厚积薄发,积跬步以致千里。今日贝壳:C语言static的用法与static修饰变量的空间存储特征。要点: static在C中主要有两个作用,一修饰作用域;二修饰生存期1.static修饰全局变量:修饰作用域static修饰的静态全局变量与普通全局变量唯一的区别是:静态全局变量仅在此源文件中有效,不能被其他源文件引用。该全局变量的作用域被限定在此源文件。2.static修饰函数:修饰作用域。static修饰的函数,作用域仅在此源文件,不能在其他源文件中调用。该函数的作用域被限定在此源文件。static1.c//*******//file1.c文件代码如下//*******static int n = 10;//静态全局变量static void foo() //静态函数{ printf("Hello world !");}.... //*******//file2.c//*******extern int n;//extern声明使用file1中的n,引发错误,因为n为static静态全局变量 //如果n未用static修饰,通过extern可引用file1.c中的nextern void foo(); //同上,引发错误,静态函数作用仅在其源文件内.... 3.static修饰局部变量:修饰生存期static修饰的静态局部变量,同普通局部变量的区别:•静态局部变量存储在静态区,普通局部变量存储在栈区。•静态局部变量未初始化时,系统自动置0;初始化仅在函数初次调用时进行一次。•静态局部变量在函数结束时不会释放,其生存期为整个程序运行期,并能保存上次调用的值。static2.c#include<stdio.h>void foo(){static int counter=0; //仅在初次调用foo()时初始化printf("counter:%d",counter);counter++;}int main(){foo();//第一次调用foo(),counter输出0foo();//第二次调用foo(),counter输出1return 0;}去掉static再运行一下程序,结果不同。