程序结构之静态本地变量
Posted songbeyond
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序结构之静态本地变量相关的知识,希望对你有一定的参考价值。
静态本地变量:
-
在本地变量定义时加上static修饰符就成为静态本地变量
-
当函数离开的时候,静态本地变量会继续存在并保持其值
-
静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数时会保持上次离开时的值
实例:
#include <stdio.h> int main(int argc,char const *argv[]) { f(); f(); f(); return 0; } int f() { static int all; printf("%d ",all); all += 1; return all; }
运行结果:
0 1 2
-
静态本地变量实际上是特殊的全局变量
-
它们位于相同的内存区域
-
静态本地变量具有全局的生存期,函数内的局部作用域(只能在定义它的函数内访问)
-
static在这里的意思是局部作用域(本地可访问)
-
实例:
#include <stdio.h> int gAll = 10; int main(int argc,char const *argv[]) { f(); return 0; } int f() { int k=0,j=0; static int all; printf("&gAll = %p ",&gAll); //%p输出指针值,以16进制输出,32位平台输出4个字节,64位平台输出8个字节
printf("&all = %p ",&all); printf("&k = %p ",&k); printf("&j = %p ",&j); return all; }
运行结果:
&gAll = 0x80496c0 &all = 0x80496c8 &k = 0xff92a6f4 &j = 0xff92a6f0
观察可发现静态本地变量和全局变量在同一快内存区域放着,也就解释了上面的例子中 all 未初始化的默认值是 0 ,一般本地变量在另一块内存放着,很容易理解了。
以上是关于程序结构之静态本地变量的主要内容,如果未能解决你的问题,请参考以下文章