当前位置:天才代写 > tutorial > C语言/C++ 教程 > c语言中static利用要领

c语言中static利用要领

2017-11-02 08:00 星期四 所属: C语言/C++ 教程 浏览:51

副标题#e#

一、c措施存储空间机关

C措施一直由下列部门构成:

1)正文段——CPU执行的呆板指令部门;一个措施只有一个副本;只读,防备措施由于意外变乱而修改自身指令;

2)初始化数据段(数据段)——在措施中所有赋了初值的全局变量,存放在这里。

3)非初始化数据段(bss段)——在措施中没有初始化的全局变量;内核将此段初始化为0。

4)栈——增长偏向:自顶向下增长;自动变量以及每次函数挪用时所需要生存的信息(返回地点;情况信息)。

5)堆——动态存储分。

|-----------|
| |
|-----------|
| 栈 |
|-----------|
| | |
| |/ |
| |
| |
| /| |
| | |
|-----------|
| 堆 |
|-----------|
| 未初始化 |
|-----------|
| 初始化 |
|-----------|
| 正文段 |
|-----------|


#p#副标题#e#

二、 面向进程措施设计中的static

1. 全局静态变量

在全局变量之前加上要害字static,全局变量就被界说成为一个全局静态变量。

1)内存中的位置:静态存储区(静态存储区在整个措施运行期间都存在)

2)初始化:未经初始化的全局静态变量会被措施自动初始化为0(自动工具的值是任意的,除非他被显示初始化)

3)浸染域:全局静态变量在声明他的文件之外是不行见的。精确地讲从界说之处开始到文件末了。

界说全局静态变量的长处:

<1>不会被其他文件所会见,修改

<2>其他文件中可以利用沟通名字的变量,不会产生斗嘴。

2. 局部静态变量

在局部变量之前加上要害字static,局部变量就被界说成为一个局部静态变量。

1)内存中的位置:静态存储区

2)初始化:未经初始化的全局静态变量会被措施自动初始化为0(自动工具的值是任意的,除非他被显示初始化)

3)浸染域:浸染域仍为局部浸染域,当界说它的函数可能语句块竣事的时候,浸染域随之竣事。

注:当static用来修饰局部变量的时候,它就改变结局部变量的存储位置,从本来的栈中存放改为静态存储区。可是局部静态变量在分开浸染域之后,并没有被销毁,而是仍然驻留在内存傍边,直到措施竣事,只不外我们不能再对他举办会见。

当static用来修饰全局变量的时候,它就改变了全局变量的浸染域(在声明他的文件之外是不行见的),可是没有改变它的存放位置,照旧在静态存储区中。

3. 静态函数

在函数的返回范例前加上要害字static,函数就被界说成为静态函数。

函数的界说和声明默认环境下是extern的,但静态函数只是在声明他的文件傍边可见,不能被其他文件所用。

界说静态函数的长处:

<1> 其他文件中可以界说沟通名字的函数,不会产生斗嘴

<2> 静态函数不能被其他文件所用。

存储说明符auto,register,extern,static,对应两种存储期:自动存储期和静态存储期。

auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的措施块时被成立,它在该措施块勾那时存在,退出该措施块时取消。

要害字extern和static用来说明具有静态存储期的变量和函数。用static声明的局部变量具有静态存储一连期(static storage duration),或静态范畴(static extent)。固然他的值在函数挪用之间保持有效,可是其名字的可视性仍限制在其局部域内。静态局部工具在措施执行到该工具的声明处时被首次初始化。

扩展阐明:

术语static有着不寻常的汗青.起初,在C中引入要害字static是为了暗示退出一个块后仍然存在的局部变量。随后,static C中有了第二种寄义:用来暗示不能被其它文件会见的全局变量和函数。为了制止引入新的要害字,所以仍利用static要害字来暗示这第二种寄义。最后,

C++重用了这个要害字,并赋予它与前面差异的第三种寄义:暗示属于一个类而不是属于此类的任何特定工具的变量和函数(与Java中此要害字的寄义沟通)。

 

    关键字:


天才代写-代写联系方式