码迷,mamicode.com
首页 > 其他好文 > 详细

程序结构之静态本地变量

时间:2020-03-16 21:50:05      阅读:55      评论:0      收藏:0      [点我收藏+]

标签:printf   访问   函数   结果   amp   nbsp   style   区域   程序   

静态本地变量:

  • 在本地变量定义时加上static修饰符就成为静态本地变量

  • 当函数离开的时候,静态本地变量会继续存在并保持其值

  • 静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数时会保持上次离开时的值

实例:

#include <stdio.h>
int main(int argc,char const *argv[]) {
    f();
    f();
    f();
    return 0;
}

int f() {
    static int all;
    printf("%d\n",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\n",&gAll);  //%p输出指针值,以16进制输出,32位平台输出4个字节,64位平台输出8个字节
printf(
"&all = %p\n",&all); printf("&k = %p\n",&k); printf("&j = %p\n",&j); return all; }

运行结果:

&gAll = 0x80496c0
&all  = 0x80496c8
&k    = 0xff92a6f4
&j    = 0xff92a6f0

观察可发现静态本地变量和全局变量在同一快内存区域放着,也就解释了上面的例子中 all 未初始化的默认值是 0 ,一般本地变量在另一块内存放着,很容易理解了。

程序结构之静态本地变量

标签:printf   访问   函数   结果   amp   nbsp   style   区域   程序   

原文地址:https://www.cnblogs.com/songbeyond/p/12505429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!