C语言关键字之static
来源:互联网 发布:windows server ftp 编辑:程序博客网 时间:2024/05/07 05:28
C语言关键字之static
参考资料:http://topic.csdn.net/u/20101221/22/a4fdc6a1-23d0-4bdc-8bda-fe61f90ffdd7.html
http://blog.sina.com.cn/s/blog_4462f8560100lmzs.html
最近因为要在上课的时候上讲台做15分钟的演讲,在我犹豫着讲什么话题的时候,刚好在网上看到了一篇关于
C语言关键字的文章。我看了一下发现作者写得还不错,就一口气把它看完,这时候就想到了,关键字是C语言的一个重要的工具,但是有些有很容易被我们忽略,所以我就决定演讲主题就讲C语言的关键字中的static。
好现在进入我们的正题,其实static的作用范围可以有3个:静态全局变量,静态局部变量,静态函数
静态全局变量从名字就可以看得出,就是在全局变量的加上static 来修饰。
全局变量如果没有加上static的时候,全局变量自动的修饰符是extern,这样就可以被整个工程都可以访问到。但是加上了static之后,变量就只能被本文件访问到。这个可以防止了变量名的冲突。如果没有初始化的静态全局变量都后被赋值0。
在讲解局部变量之前呢,我们要先看看一个典型的c语言在内存的存储模型
一般我们在的函数中,如果是默认修饰符的局部变量,变量就会存储到函数的栈里面,这样的话函数的退出,变量就会从栈里被释放。如果加上static 修饰的话,那么静态局部变量的存储地方就发生了变化,静态局部变量是存储到静态存储区里面。静态存储区是属于程序的,只会随着程序的退出才会被释放。静态局部变量是在程序的开始就被生成的。并且不会随着函数的退出而被释放,只会在程序退出的时候才会被释放。而且每次函数用到静态局部变量都会从静态存储区里面读取静态变量的值。虽然存储地方变了但是局部变量的作用域还是在函数,并没有改变。下面的对比代码就最能解释这个了:
#include<stdio.h> void count(int a){ int result=0; result+=a; a--; printf("%d\n",result); if(a==0) return; else count(a);}int main(int argc,char *argv[]){count(2);getchar();return 0;}
输出结果是:2
1
#include<stdio.h>void count(int a){ static int result=0; result+=a; a--; printf("%d\n",result); if(a==0) return; else count(a);}int main(int argc,char *argv[]){count(2);getchar();return 0;}
输出结果是:2
3
有些人会说那你这个静态局部变量存储在这个静态存储区里面不就跟全局变量差不多,是不是也可以被其他的程序所利用啊?其实C语言给予了我们控制程序的最强大的工具,指针,如果我们可以拿到静态局部变量的指针,那么我们就可以在整个程序中利用它~
静态函数的最大作用就是把函数的作用范围限定在本文件中(就是.c文件),而不能被别的文件调用。
- C语言关键字之static
- C语言之static关键字的使用
- c语言关键字static
- c语言static关键字
- C语言关键字static
- C语言static关键字
- 关键字static(c语言)
- C语言-关键字static
- c语言关键字--static
- C语言 static 关键字
- C语言static关键字
- C语言 Static关键字
- c语言关键字static
- C语言关键字Static
- C语言 static关键字
- c语言static关键字
- 杂记之C语言之关键字volatile和static
- C语言 static关键字解析
- 最大子段和问题的分治实现和动态实现
- android监听返回按钮事件
- rowid 删除重复记录!!!
- openssl手工生成证书
- 写出我的第一个博客文章
- C语言关键字之static
- IplImage和Mat间的相互转换
- GoogleEarth二次开发难点和技巧
- 获取IP地址
- Hadoop RPC 分析总结
- sha崽的AC自动机专项练习AK!!
- AspNetPager+Ajax实现无刷新分页
- 计算机网络 OSI参考模型 ---开放系统互连参考模型
- 黑马程序员-多线程