static作用范围及其生存周期
全局普通变量及static全局变量
全局变量存放在静态区,生存周期从程序开始到程序结束,整个程序都可以访问它,其它文件通过extern关键词访问。
static全局变量放在静态区,生存周期从程序开始到程序结束,只在本文件内可以访问,其它文件无法通过extern关键词访问。
局部变量及static局部变量
普通局部变量放在栈区,作用域之外无法访问,出作用域即被弹出栈,生存周期为声明到作用域结束。
static局部变量放在静态区,程序开始的时候就已经放在静态区了,没被初始化的static变量默认为0。多次调用函数,只有第一次函数调用的初始化会进行赋值,后面的初始化都只是声明进入作用域,函数调用结束之后会出作用域,但是静态区的值一直在。
看一段试验代码:
#include<stdio.h>
#include<stdlib.h>
int a=10;
int b=20;
static void func()
{
++a;
++b;
static int a=1;
static int b=2;
++a;
++b;
printf("%d %d\n",a,b);
}
void func2()
{
++a;
++b;
static int a;
static int b;
++a;
++b;
printf("%d %d\n",a,b);
}
int main()
{
func();
func();
func2();
func2();
printf("%d %d\n",a,b);
return 0;
}
其输出为:
➜ tmp gcc -o test test.c
➜ tmp ./test
2 3
3 4
1 1
2 2
14 24
看完就秒懂
普通函数和static函数
普通函数和static函数都放在代码段,调用过程没啥区别,static函数仅存在于本文件中,不会与其它文件的函数重名冲突这样。
本文由 Rust401 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: May 16, 2019 at 01:17 am
Buy Ketotifen Pills Online cialis 20 vademecum Propecia For Hair Loss Good Sites To Buy Viagra