个人网站源代码,抖音代运营美发,手机排版软件app,百度top排行榜static在c里面可以用来修饰变量#xff0c;也可以用来修饰函数。先看用来修饰变量的时候。变量在c里面可分为存在全局数据区、栈和堆里。其实我们平时所说的堆栈是栈而不是堆#xff0c;不要弄混。int a ;int main(){ int b ; int c* (int *)malloc(sizeof(int));}a是… static在c里面可以用来修饰变量也可以用来修饰函数。先看用来修饰变量的时候。变量在c里面可分为存在全局数据区、栈和堆里。其实我们平时所说的堆栈是栈而不是堆不要弄混。int a ;int main(){ int b ; int c* (int *)malloc(sizeof(int));}a是全局变量b是栈变量c是堆变量。static对全局变量的修饰可以认为是限制了只能是本文件引用此变量。有的程序是由好多.c文件构成。彼此可以互相引用变量但加入static修饰之后只能被本文件中函数引用此变量。static对栈变量的修饰可以认为栈变量的生命周期延长到程序执行结束时。一般来说栈变量的生命周期由OS管理在退栈的过程中栈变量的生命也就结束了。但加入static修饰之后变量已经不再存储在栈中而是和全局变量一起存储。同时离开定义它的函数后不能使用但如再次调用定义它的函数时它又可继续使用 而且保存了前次被调用后留下的值。static对函数的修饰与对全局变量的修饰相似只能被本文件中的函数调用而不能被同一程序其它文件中的函数调用。 文件a.cstatic int i; //只在a文件中用int j; //在工程里用static void init() //只在a文件中用{}void callme() //在工程中用{ static int sum;} 上面的全局i变量和init()函数只能用在a.c文件中,全局变量sum的作用域只在callme里。变量j和函数callme()的全局限扩充到整个工程文件。所以可以在下面的b.c中用extern关键字调用。extern告诉编译器这个变量或者函数在其他文件里已经被定义了。 文件b.cextern int j; //调用a文件里的extern void callme(); //调用a文件里的int main(){ ...} extern的另外用法是当C和C混合编程时如果c调用的是c源文件定义的函数或者变量那么要加extern来告诉编译器用c方式命名函数 文件A.cpp调用a.c里面的变量i和函数callme()extern C //在c文件里调用c文件中的变量{ int j; void callme();}int main(){ callme();} 二 static法则 A、若全局变量仅在单个C文件中访问则可以将这个变量修改为静态全局变量以降低模块间的耦合度; B、若全局变量仅由单个函数访问则可以将这个变量改为该函数的静态局部变量以降低模块间的耦合度 C、设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时需要考虑重入问题 注耦合性英语Couplingdependency或称耦合力或耦合度是一种软件度量是指一程序中模块及模块之间信息或参数依赖的程度。内聚性是一个和耦合性相对的概念一般而言低耦合性代表高内聚性反之亦然。耦合性和内聚性都是由提出结构化设计概念的赖瑞·康斯坦丁所提出。低耦合性是结构良好程序的特性低耦合性程序的可读性及可维护性会比较好。 全局变量有外部、静态两种存储方式。(1)全局变量一般用外部存储方式存储用保留字extern加以定义。此时变量的作用域是构成整个程序的所有程序文件也就是定义的外部变量可供其它程序文件使用。使用这样的全局变量一定要非常慎重一旦产生错误将波及整个程序。(2)如果希望全局变量仅限于本程序文件使用而其它程序文件中不能引用这时必须将其存储方式定义为静态存储方式用保留字static加以定义。此时称为静态外部变量。例如在上例文件filelc中如果作这样的定义static int a则变量a的作用域被缩小至本程序文件filelc文件file2c中不能引用。值得注意的是对全局变量加static定义为静态存储方式并不意味着是静态存储而不加static是动态存储。两种形式的全局变量(外部变量)都是静态存储方式都是编译时分配存储空间但作用域不同。使用静态外部变量有利于隔离错误有利于模块化程序设计。(3)全局变量的缺省存储方式是外部存储方式。前面章节中的程序没有见到变量的存储类别定义实际上采用变量的缺省存储方式。对局部变量采用auto方式对全局变量采用extern方式。这也是至今为止我们在程序中没有见到auto、extern等的原因。至此我们对变量的存储类别及数据类型进行了全面讨论在此作个小结。1变量定义的一般形式存储类别数据类型变量表2变量定义的作用①规定了变量的取值范围。②规定了变量进行的运行操作。③规定了变量的作用域。④规定了变量的存储方式。⑤规定了变量占用的存储空间。3局部变量和全局变量从作用域角度将变量分为局部变量和全局变量。它们采取的存储类别如下局部变量①自动变量即动态局部变量(离开函数值就消失)。②静态局部变量(离开函数值仍保留)。③寄存器变量(离开函数值就消失)。④形式参数可以定义为自动变量或寄存器变量。全局变量①静态外部变量(只限本程序文件使用)。②外部变量(即非静态的外部变量允许其它程序文件引用)。4动态存储和静态存储从变量存在时间可将变量存储分为动态存储和静态存储。静态存储是在整个程序运行时都存在而动态存储则是在调用函数时临时分配存储单元。动态存储①自动变量(函数内有效)。②寄存器变量(函数内有效)。③形式参数。静态存储①静态局部变量(函数内有效)。②静态外部变量(本程序文件内有效)。③外部变量(整个程序可引用)。5静态存储区和动态存储区从变量值存放的位置可将变量存储区分为静态存储区和动态存储区内存中静态存储区①静态局部变量。②静态外部变量。③外部变量(可被同一程序其它文件引用)。内存中动态存储区自动变量和形式参数。CPU中的寄存器寄存器变量。 转载于:https://www.cnblogs.com/dushikang/p/8550941.html