C语言 static 解析
来源:互联网 发布:js 获取当前日期 周几 编辑:程序博客网 时间:2024/06/17 08:47
一,static全局变量
我们知道,一个进程在内存中的布局如图1所示:
其中.text段保存进程所执行的程序二进制文件,.data段保存进程所有的已初始化的全局变量,.bss段保存进程未初始化的全局变量(其他段中还有很多乱七八糟的段,暂且不表)。在进程的整个生命周期中,.data段和.bss段内的数据时跟整个进程同生共死的,也就是在进程结束之后这些数据才会寿终就寝。
当一个进程的全局变量被声明为static之后,它的中文名叫静态全局变量。静态全局变量和其他的全局变量的存储地点并没有区别,都是在.data段(已初始化)或者.bss段(未初始化)内,但是它只在定义它的源文件内有效,其他源文件无法访问它。所以,普通全局变量穿上static外衣后,它就变成了新娘,已心有所属,只能被定义它的源文件(新郎)中的变量或函数访问。
二,static局部变量
普通的局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配,但是记得使用完这个堆空间后要释放之。
static局部变量中文名叫静态局部变量。它与普通的局部变量比起来有如下几个区别:
1)位置:静态局部变量被编译器放在全局存储区.data(注意:不在.bss段内,原因见3)),所以它虽然是局部的,但是在程序的整个生命周期中存在。
2)访问权限:静态局部变量只能被其作用域内的变量或函数访问。也就是说虽然它会在程序的整个生命周期中存在,由于它是static的,它不能被其他的函数和源文件访问。
3)值:静态局部变量如果没有被用户初始化,则会被编译器自动赋值为0,以后每次调用静态局部变量的时候都用上次调用后的值。这个比较好理解,每次函数调用静态局部变量的时候都修改它然后离开,下次读的时候从全局存储区读出的静态局部变量就是上次修改后的值。
相信大家还记得C++面向对象编程中的private函数,私有函数只有该类的成员变量或成员函数可以访问。在C语言中,也有“private函数”,它就是接下来要说的static函数,完成面向对象编程中private函数的功能。
当你的程序中有很多个源文件的时候,你肯定会让某个源文件只提供一些外界需要的接口,其他的函数可能是为了实现这些接口而编写,这些其他的函数你可能并不希望被外界(非本源文件)所看到,这时候就可以用static修饰这些“其他的函数”。
所以static函数的作用域是本源文件,把它想象为面向对象中的private函数就可以了。
- C语言 static 解析
- C语言 static关键字解析
- C语言static关键字解析
- C语言static关键字解析
- C语言static关键字解析
- C语言static关键字解析
- Static在C语言中的 解析
- C语言static关键字解析 【转】
- C语言关于static的解析
- C语言存储空间布局以及static解析
- c语言中static和extern的用法详细解析
- c语言中static和extern的用法详细解析
- C语言中的static
- C语言static变量
- c 语言的 static
- c语言Static 转
- C语言 static
- C语言static总结
- Servlet教程____Servlet简介和工作原理
- JVM内存模型你只要看这一篇就够了
- HTTP Status 403
- 简单工场、工场方法、抽象工厂模式浅析
- 一、面向对象的六大原则
- C语言 static 解析
- AtCoder Grand Contest 017做题记录
- 客户需求解密板子里面的加密文件,qt做的openssl的加解密的tool
- 机顶盒操作时常用的一些基本命令
- Codeforces 514C Watto And Mechanism 哈希
- PHP入门必选
- PS中jpg、png和psd格式
- 第十章 分组数据
- 动态规划:HDU1224-Free DIY Tour