c语言开发之static与extern
来源:互联网 发布:网页美工金典案例教程 编辑:程序博客网 时间:2024/05/01 12:04
在C程序世界里,不同代码国度以.c文件为国界分隔开来,在单个国家(C源文件)里有不同的函数占山为王,军阀割据,每个C程序世界里只有一个君主main和其首都(main函数体),main通过下传圣旨(参数),调用各种军阀(函数),来掌控整个C程序世界的有序运行。在和谐世界的幌子下,却是别番风景,某军阀(函数)心怀叵测,不想单纯听从于main的指挥与调度,树立了自己的政权旗帜static。static不用听附与main的调度,自己做主,私藏金库(空间)。而main对此却很无奈,因为相对static来说,extern更是让它皇权难保。不同的国家(不同的.c文件)之间通过extern相互私通,传递信息。二者联合作乱,让编程者逻辑混淆。当然,如果编程者连一个国家都没有走出去过(指将所有代码写到一个.c文件里),不能够上升到一个宏观的角度,将不知所云。乱世出枭雄,切听我慢慢道来其中一二。
政权旗帜static
简单来说static修辞变量,就是指该变量空间独立于函数中的auto变量或叫栈变量(请查看auto关键字章节),static变量空间在内存中的静态区内被分配。
1) 修饰局部变量
一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话,该变量便存放在静态数据区,其生命周期一直持续到整个程序执行结束。但是在这里要注意的是,虽然用static对局部变量进行修饰过后,其生命周期以及存储空间发生了变化,但是其作用域并没有改变,其仍然是一个局部变量,作用域仅限于该语句块。
在用static修饰局部变量后,该变量只在初次运行时进行初始化工作,且只进行一次。
#include<stdio.h>
void fun()
{
static int a=1; a++;
printf("%d\n",a);
}
int main(void)
{
fun();
fun();
return 0;
}
程序执行结果为: 2 3
说明在第二次调用fun()函数时,a的值为2,并且没有进行初始化赋值,直接进行自增运算,所以得到的结果为3.
对于静态局部变量如果没有进行初始化的话,对于整形变量系统会自动对其赋值为0,对于字符数组,会自动赋值为'\0'.
2) 修饰全局变量
对于一个全局变量,它既可以在本源文件中被访问到,也可以在同一个工程的其它源文件中被访问(只需用extern进行声明即可)。
//有file1.c
int a=1;
file2.c
#include<stdio.h>
extern int a;
int main(void)
{
printf("%d\",a);
return 0;
}
则执行结果为 1
但是如果在file1.c中把int a=1改为static int a=1;
那么在file2.c是无法访问到变量a的。原因在于用static对全局变量进行修饰改变了其作用域的范围,由原来的整个工程可见变为本源文件可见。
3) 修饰函数
用static修饰函数的话,情况与修饰全局变量大同小异,就是改变了函数的作用域。
- c语言开发之static与extern
- c语言 static与extern
- C语言extern与static的用法,及extern “c
- c语言static与extern的用法
- c语言static与extern的用法
- c语言static与extern的用法
- C语言extern与static修饰变量
- <C语言>static与extern关键字
- C语言 static extern
- 黑马程序员_iOS开发C语言基础之关键字typedef、static、extern使用
- C语言extern和static
- C语言extern和static
- C语言关键字 - 乱世枭雄:static与extern
- C语言关键字 - 乱世枭雄:static与extern
- c语言static与extern的用法 (转载)
- C语言基础——extern 与 static
- 黑马程序员——【C语言】static与extern
- C语言中static与extern的用法
- Java知识思维导图
- 算法:区分正负数
- montage matlab
- 数据库读写分离
- 毕业生面试的十大误区!
- c语言开发之static与extern
- json 注意事项
- WebSphere MQ程序设计
- OJDBC版本区别
- 链表操作 算法面试题
- C++优先级
- 深入理解Session机制 .
- 多线程下关于硬件资源的释放问题
- gcc与g++区别