c语言中static作用
2015-09-05 10:35
309 查看
(1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
![](http://images2015.cnblogs.com/blog/493357/201509/493357-20150905103307936-564118402.png)
我们通过这个例子可以看到static 作为静态存储在每次函数调用完毕并不释放。
(2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
为了说明这个问题我们需要理解extern 这个关键字。我们建立三个文件 main.c a.c b.c 三个文件。
![](http://images2015.cnblogs.com/blog/493357/201509/493357-20150905113003686-635919384.png)
OK!我们看到这个小例子可以运行,如果我们将 add() 函数声明为 static int(int a, int b); 则会产生报错问题。 这样也就解释了第三个问题。
(3)不能被模块外其它函数访问。它是一个本地的全局变量。在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
#include "stdio.h" int main () { int fac(int n); int i; for(i=1;i<=5;i++) { printf("%d!=%d\n",i,fac(i)); } return 0; } int fac (int n ){ static int f =1; f *= n; return f; }
![](http://images2015.cnblogs.com/blog/493357/201509/493357-20150905103307936-564118402.png)
我们通过这个例子可以看到static 作为静态存储在每次函数调用完毕并不释放。
(2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
为了说明这个问题我们需要理解extern 这个关键字。我们建立三个文件 main.c a.c b.c 三个文件。
#include "stdio.h" int main () { extern int add(int a, int b); extern int sub(int a, int b); int a =5, b =3; printf("a+b的数值是 = %d\n",add(a,b)); printf("a-b的数值是 = %d\n",sub(a,b)); return 0; }
int add (int a, int b ) { return (a+b); }
int sub(int a, int b) { return a- b; }
![](http://images2015.cnblogs.com/blog/493357/201509/493357-20150905113003686-635919384.png)
OK!我们看到这个小例子可以运行,如果我们将 add() 函数声明为 static int(int a, int b); 则会产生报错问题。 这样也就解释了第三个问题。
(3)不能被模块外其它函数访问。它是一个本地的全局变量。在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
相关文章推荐
- C++中三种继承方式
- C语言巧妙运用位运算十进制转化为二进制输出
- 学习C++的50条忠告
- STL hash_map 底层初探
- C语言基础学习——第7天(二维数组、指针数组等)
- 关于为c++类中的变量赋值的问题
- 了解编译器默默生成哪些函数(Effective C++_5)
- C++ 笔记(二) —— 不要在构造和析构函数中调用虚函数
- C++入门经典 笔记 (第十四章)高级函数
- C++——friend
- 确定对象试用前已经初始化(Effective C++_4)
- C++中const的实现机制
- 浅谈C++多态
- an error occurred while creating opening the c++ browsing database 解决办法
- C++ #include .h extern 的相关关系及说明
- C语言
- C++语言的历史和标准化
- [Books]《C语言教程》笔记
- 设计模式c++(二)----Biluder建造者模式
- C/C++ 如何来自动优雅的涮别银家的贴子