Chinaunix首页 | 论坛 | 博客
  • 博客访问: 556148
  • 博文数量: 127
  • 博客积分: 1169
  • 博客等级: 少尉
  • 技术积分: 1298
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-16 14:29
个人简介

空白

文章分类

全部博文(127)

分类: C/C++

2012-03-08 15:26:49

总结:
一、静态全局变量/静态函数
外部静态变量/函数(静态函数)
在C中static有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。
但为了限制全局变量/函数的作用域, 函数或变量前加static使得函数成为静态函数。
但此处“static”的含义不是指存储方式,
而是指对函数的作用域仅局限于本文件(所以又称内部函数)。
注意此时, 对于外部(全局)变量, 不论是否有static限制, 它的存储区域都是在静态存储区,
生存期都是全局的. 此时的static只是起作用域限制作用, 限定作用域在本模块(文件)内部.
使用内部(static)函数的好处是:
不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。
静态全局变量有以下特点:
A.该变量在全局数据区分配内存;
B.未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);
C.静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的。

定义静态全局变量有以下好处:
A.静态全局变量、静态函数不能被其它文件所用;
B.其它文件中可以定义相同名字的变量或函数,不会发生冲突。


二、静态局部变量
在C/C++中, 局部变量按照存储形式可分为三种auto, static, register
与auto类型(普通)局部变量相比, static局部变量有三点不同:
1. 存储空间分配不同
auto类型分配在栈上, 属于动态存储类别, 占动态存储区空间, 函数调用结束后自动释放,
而static分配在静态存储区, 在程序整个运行期间都不释放.
两者之间的作用域相同(static局部变量和普通局部变量作用域都在定义他们的函数之内),
但生存期不同.
2. static局部变量在所处模块在初次运行时进行初始化工作, 且只操作一次
3. 对于局部静态变量, 如果不赋初值, 编译期会自动赋初值0或空字符,
而auto类型的初值是不确定的.
静态局部变量有以下特点:

A. 该变量在全局数据区分配内存;
B. 静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
C. 静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
D. 它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;

阅读(1672) | 评论(1) | 转发(0) |
0

上一篇:函数指针和指针函数

下一篇:指针与函数

给主人留下些什么吧!~~

背包包1112012-03-09 00:06:35

额(⊙o⊙)…内部函数有好处的同时也会导致混乱的……