全局变量、局部变量和静态变量的说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
全局变量、局部变量和静态变量的说明
变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。
对变量存储区域的说明:全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。
⽣存期可分为:
1、静态⽣存期:在程序开始前就已经存在并初始化完成,这个变量要等整个程序结束后才销毁;
2、动态⽣存期:程序流程运⾏到这个位置时才会为这个变量分配内存,程序流程离开这个变量的作⽤域后就销毁它。
可链接性(作⽤域)可分为:
1、内部链接:这个变量在定义它的⽂件内有效;
2、外部链接:这个变量在整个⼯程⽂件中都有效;
3、不可链接:这个变量只在其代码块中有效;
对变量⽣存期的说明:全局变量、静态全局变量和静态局部变量都属于静态⽣存期,即这个变量要等到整个程序结束后才销毁;局部变量属于动态⽣存期,即该变量在函数中,每⼀次调⽤函数,该变量都是全新的⼀个。
对变量作⽤域的说明:全局变量在整个⼯程⽂件内都有效;静态全局变量只在定义它的⽂件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配⼀次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,在每次函数调⽤时分配存储单元,函数返回后,变量消失,存储空间释放。
静态局部变量⽰例:
1 #include<stdio.h>
2int fun(int n)
3 {
4static int f=1;
5 f=f*n;
6return f;
7 }
8void main()
9 {
10int i;
11for(i=1;i<=5;i++)
12 printf("fun(%d)=%d\n",i,fun(i));
13 }
运⾏结果:
全局变量与静态全局变量的进⼀步说明:
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
全局变量本⾝就是静态存储⽅式,静态全局变量当然也是静态存储⽅式。
这两者在存储⽅式上并⽆不同。
这两者的区别虽在于⾮静态全局变量的作⽤域是整个源程序,当⼀个源程序由多个源⽂件组成时,⾮静态的全局变量在各个源⽂件中都是有效的。
⽽静态全局变量则限制了其作⽤域,即只在定义该变量的源⽂件内有效,在同⼀源程序的其它源⽂件中不能使⽤它。
由于静态全局变量的作⽤域局限于⼀个源⽂件内,只能为该源⽂件内的函数公⽤,因此可以避免在其它源⽂件中引起错误。
同样的,函数前冠以static就构成了静态函数,表⽰该函数的作⽤域仅局限于本源⽂件,我们称这样的函数为内部函数,使⽤内部函数的好处是:不同的⼈编写函数时,不⽤担⼼⾃⼰定义的函数是否会与其它⽂件中的函数同名。
从以上分析可以看出,把局部变量改变为静态局部变量后改变了它的存储⽅式和⽣存期,但作⽤域还是在函数内;把全局变量改变为静态全局变量后改变了它的作⽤域,但存储⽅式和⽣存期未改变。
因此static 这个说明符在不同的地⽅所起的作⽤是不同的。
应予以注意。