C语言中static与extern的用法
来源:互联网 发布:学建模一定要学编程吗 编辑:程序博客网 时间:2024/06/03 22:39
转载:http://blog.csdn.net/king_jie0210/article/details/56277383
在C语言中,static与extern的用法
(1)修饰局部变量
a.一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话,该变量便存放在静态数据区,其生命周期一直持续到整个程序执行结束;
b.对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而是保留上次函数调用结束时的值;
c.如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说如果不赋初值则它的值是一个不确定的值;
d.虽然静态局部变量在函数调用结束后仍然存在,但其他函数不能引用它。
什么情况下需要用局部静态变量呢?
a.需要保留函数上一次调用结束时的值;
eg:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
程序执行结果为: 2 3
说明在第二次调用fun()函数时,a的值为2,并且没有进行初始化赋值,直接进行自增运算,所以得到的结果为3.
b.如果初始化后,变量只引用而不改变其值,则这时用静态局部变量比较方便,以免每次调用时重新赋值
(2)修饰全局变量
static修饰全局变量只能在本文件中使用。如果一个全局变量,它既可以在本源文件中被访问到,也可以在同一个工程的其它源文件中被访问就需要用到extern.
eg:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
则执行结果为 1
但是如果在file1.c中把int a=1改为static int a=1;
那么在file2.c是无法访问到变量a的。原因在于用static对全局变量进行修饰其作用域仅局限于本文件。
(3)内部函数和外部函数
用static修饰函数称为静态函数(也叫内部函数),对函数的作用域仅局限于本文件。这样不同的人编写不同的函数时不用担心自己定义的函数是否会与其它文件中的函数同名,因为同名也没关系
eg:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
用extern修饰函数称为外部函数,可供其他文件调用。函数首部可以写为
- 1
- 1
这样函数fun就可以为其他文件调用。C语言规定,如果在定义函数时省略extern,则隐含为外部函数
- 顶
- 0
- C语言中static与extern的用法
- C语言中static与extern的用法
- c语言static与extern的用法
- c语言static与extern的用法
- c语言static与extern的用法
- C语言extern与static的用法,及extern “c
- c语言static与extern的用法 (转载)
- c语言中static用法和extern
- C语言中static 和 extern用法
- c语言中static 用法和extern
- C语言中static,extern,volatile的用法
- c语言中static和extern的用法详细解析
- c语言中static和extern的用法详细解析
- C语言与C++中static,extern的用法及区别总结
- C语言extern与static的用法,及extern “c 收藏
- objective-c static 与 extern 的用法
- C++中extern与static的用法
- 【static&extern】c语言static用法
- arcgis收藏标注在Graphic toJson遇到的问题!
- 07.SpringMVC 请求处理
- Spring 整合Hibernate报错:Error creating bean with name 'dataSource' defined in class path resource
- 白话空间统计二十四:地理加权回归(一)
- Vue2 移动端开发环境搭建
- C语言中static与extern的用法
- maven的pom.xml出错 已经下载完了jar包
- Java中的24种设计模式与7大原则
- Python 集合
- MySQL 手工注入常用语句
- 【C#/WPF】用System.Timers.Timer计时器做浮窗广告
- 从基础到分析,聊一聊企业报表平台的建设规划!
- 08.SpringMVC 处理器
- 前端路由实现与 react-router 源码分析 React