频道栏目
首页 > 程序开发 > 软件开发 > C语言 > 正文
C语言中static对于变量的作用
2018-06-13 13:59:38      个评论    来源:Lion_yan_  
收藏   我要投稿

一、static修饰全局变量:

当一个进程的全局变量被声明为static之后,它的中文名叫静态全局变量。静态全局变量和其他的全局变量的存储地点并没有区别,都是在.data段(已初始化)或者.bss段(未初始化)内,但是它只在定义它的源文件内有效,其他源文件无法访问它。根据这个原理,我们可以在多个文件中定义相同名字的全局变量而不影响,可以重名。

#include "file1.h"  
  
static char* hello = "hello CSDN!";  
  
void printStr()  
{  
 printf("%s\n", hello);  
}  //输出hello CSDN
#include "file1.h"  
int main()  
{  
 printStr();  
 printf("%s\n", hello);  
 return 0;  
}  //报错hello未定义

在文件file1中定义的静态全局变量,在file2文件中调用会报错

file2.c:5: 错误:‘hello’ 未声明 (在此函数内第一次使用)
file2.c:5: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其所在的函数内只报告一次。)

二、static修饰局部变量:

 

? static局部变量中文名叫静态局部变量。

?????????? 1)位置:静态局部变量被编译器放在全局存储区.data(注意:不在.bss段内,原因见3)),所以它虽然是局部的,但是在程序的整个生命周期中存在

???????????2)访问权限:静态局部变量只能被其作用域内的变量或函数访问。也就是说虽然它会在程序的整个生命周期中存在,由于它是static的,它不能被其他的函数和源文件访问。

?????????? 3)值:静态局部变量如果没有被用户初始化,则会被编译器自动赋值为0,以后每次调用静态局部变量的时候都用上次调用后的值。这个比较好理解,每次函数调用静态局部变量的时候都修改它然后离开,下次读的时候从全局存储区读出的静态局部变量就是上次修改后的值。

#include "file1.h"  
  
void printStr()  
{  
 int normal_val = 0;  
 static int static_val = 0; 
 printf("normal_val = %d\n",normal_val);  
 printf("static_val = %d\n",static_val")
 normal_val++;  
 static_val++;  
}  
#include "file1.h"  
int main()  
{  
 printStr();  
 printStr();  
 printStr();  
 return 0;
}

输出结果:

normal_val = 0
static_val = 0
normal_val = 0
static_val = 1
normal_val = 0
static_val = 2
点击复制链接 与好友分享!回本站首页
上一篇:C语言程序设计练习之2005 第几天?
下一篇:最后一页
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站