c语言编程中static运用方法
操作方法
- 01
c语言中static运用方法一、c程序存储空间布局 C程序一向由下列有些组成: 1)正文段——CPU履行的机器指令有些;一个程序只要一个副本;只读,防止程序因为意外事故而修正本身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的大局变量,寄存在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的大局变量;内核将此段初始化为0。 4)栈——增加方向:自顶向下增加;主动变量以及每次函数调用时所需求保管的信息(回来地址;环境信息)。 5)堆——动态存储分。 |-----------|| ||-----------||栈||-----------|| | || |/ || || || /| || | ||-----------||堆||-----------||未初始化||-----------||初始化||-----------||正文段||-----------| 语言中static运用方法(2)二、面向进程程序设计中的static 1.大局静态变量 在大局变量之前加上关键词static,大局变量就被界说变成一个大局静态变量。 1)内存中的方位:静态存储区(静态存储区在整个程序运转时间都存在) 2)初始化:未经初始化的大局静态变量会被程序主动初始化为0(主动目标的值是恣意的,除非他被显现初始化) 3)效果域:大局静态变量在声明他的文件之外是不行见的。精确地讲从界说之处开端到文件完毕。 界说大局静态变量的优点: 不会被其他文件所拜访,修正 其他文件中能够运用一样姓名的变量,不会发生冲突。 2.部分静态变量 在部分变量之前加上关键词static,部分变量就被界说变成一个部分静态变量。 1)内存中的方位:静态存储区 2)初始化:未经初始化的大局静态变量会被程序主动初始化为0(主动目标的值是恣意的,除非他被显现初始化) 3)效果域:效果域仍为部分效果域,当界说它的函数或许句子块完毕的时分,效果域随之完毕。 注:当static用来润饰部分变量的时分,它就改动了部分变量的存储方位,从本来的栈中寄存改为静态存储区。可是部分静态变量在脱离效果域之后,并没有被毁掉,而是依然驻留在内存傍边,直到程序完毕,只不过咱们不能再对他进行拜访。 当static用来润饰大局变量的时分,它就改动了大局变量的效果域(在声明他的文件之外是不行见的),可是没有改动它的寄存方位,仍是在静态存储区中。 3.静态函数 在函数的回来类型前加上关键词static,函数就被界说变成静态函数。 函数的界说和声明默许情况下是extern的,但静态函数只是在声明他的文件傍边可见,不能被其他文件所用。 界说静态函数的优点: 其他文件中能够界说一样姓名的函数,不会发生冲突 静态函数不能被其他文件所用。 存储阐明符auto,register,extern,static,对应两种存储期:主动存储期和静态存储期。 auto和register对应主动存储期。具有主动存储期的变量在进入声明该变量的程序块时被树立,它在该程序块活动时存在,退出该程序块时吊销。 关键词extern和static用来阐明具有静态存储期的变量和函数。用static声明的部分变量具有静态存储持续期(static storage duration),或静态规模(static extent)。尽管他的值在函数调用之间坚持有用,可是其姓名的可视性仍约束在其部分域内。静态部分目标在程序履行到该目标的声明处时被初次初始化。 拓展剖析: 术语static有着不寻常的前史.起先,在C中引进关键词static是为了表明退出一个块后依然存在的部分变量。随后,static C中有了第二种意义:用来表明不能被其它文件拜访的大局变量和函数。为了防止引进新的关键词,所以仍运用static关键词来表明这第二种意义。最终, C++重用了这个关键词,并赋予它与前面不一样的第三种意义:表明归于一个类而不是归于此类的任何特定目标的变量和函数(与Java中此关键词的意义一样)。