C语言编程入门之static对于变量的作用
戴懿颢 2019-04-10 来源 : 阅读 1097 评论 0

摘要:本文将带你了解C语言编程入门之static对于变量的作用,希望本文对大家学C语言有所帮助。

本文将带你了解C语言编程入门之static对于变量的作用,希望本文对大家学C语言有所帮助。


C语言编程入门之static对于变量的作用


一、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

   



本文由 @职坐标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论
本文作者 联系TA

15以上年开发与技术培训经验

  • 10
    文章
  • 3287
    人气
  • 100%
    受欢迎度

已有3人表明态度,100%喜欢该老师!

进入TA的空间
求职秘籍 直通车
  • 索取资料 索取资料 索取资料
  • 答疑解惑 答疑解惑 答疑解惑
  • 技术交流 技术交流 技术交流
  • 职业测评 职业测评 职业测评
  • 面试技巧 面试技巧 面试技巧
  • 高薪秘笈 高薪秘笈 高薪秘笈
TA的其他文章 更多>>
C语言编程入门之写一个宏可以将一个数字的奇数位和偶数位交换
经验技巧 0% 的用户喜欢
C语言编程入门之c语言函数指针的用法和例子
经验技巧 0% 的用户喜欢
C语言学习之联合体_枚举_IO实例
经验技巧 0% 的用户喜欢
C语言入门之循环
经验技巧 0% 的用户喜欢
C语言程序设计之10s的秒表(代码实例)
经验技巧 0% 的用户喜欢
其他海同师资 更多>>
吕益平
吕益平 联系TA
熟悉企业软件开发的产品设计及开发
孔庆琦
孔庆琦 联系TA
对MVC模式和三层架构有深入的研究
周鸣君
周鸣君 联系TA
擅长Hadoop/Spark大数据技术
范佺菁
范佺菁 联系TA
擅长Java语言,只有合理的安排和管理时间你才能做得更多,行得更远!
金延鑫
金延鑫 联系TA
擅长与学生或家长及时有效沟通
经验技巧30天热搜词 更多>>

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程