产量周期与作用域,还有static哦

浅谈变量周期与作用域,主谈static

人类思维对于"计数"这项功能来说要远远低于计算机的超能力,计算机在自己的"大脑中"运行数以万计的数,而人类仅仅数在3-7个之间徘徊,当然是根据人类的自己的情况.而数的具体化就是今天的主角:“变量”.

在C语言中,变量可以分为全局变量和局部变量.简而言之,在头文件下而不属于任何一个函数的代码之下叫做全局变量,独自定义.而属于某一个函数的代码段下所定义得则是局部变量.

作用域(scope):通常来说,一段程序代码中所用到的名字并不总是有用的,而限定这个名字的可用性的代码范围就是这个名字的作用域,下面所展示的就是两个例子,分别为全局变量和局部变量.

6
接着谈谈生命周期:变量从创建到销毁之间的一个时间段,简而言之就是局部变量的生命周期从进入作用域开始到出了作用域结束.而全局变量是整个程序的执行,只要程序在执行,他的生命就还在.

static的解读

相信大家对关键字static已经十分熟悉,在C语言中是用来修饰变量和函数的,大致分为以下三类
1.修饰局部变量-静态局部变量
2.修饰全局变量-静态全局变量
3.修饰函数-静态函数

修饰局部变量

以下程序的差别体现static的威力:

#include<stdio.h>
void test(){
 int i = 0;
 i++;
 printf("%d\t",i);
}
int main(){
 int i = 0;
 for(i = 0; i < 10; i++){
  test();
 }
 return 0;
}

结果运行如下:
在这里插入图片描述
在static修饰后:

#include<stdio.h>
void test(){
 static int i = 0;
 i++;
 printf("%d\t",i);
}
int main(){
 int i = 0;
 for(i = 0; i < 10; i++){
  test();
 }
 return 0;
}

运行结果:
在这里插入图片描述
这两个结果产生的差异就是在main函数每次调用的时候,i的值是否改变,第一个程序没有改变是因为每次的调用都要执行int i = 0;使得i每次都回归为0再加上1;而对于第二个程序来说,static产生的作用就是让i这个变量不会在每次被调用完之后结束自己的生命周期,使其生命周期扩展到了整个程序的生命周期,于是自己的数值能够保留下来.
总结就是:static修饰的局部变量改变了生命周期,让静态局部变量出了作用域依然存在,一直到程序结束,生命周期才结束.

修饰全局变量
//add.c
int g_val = 2018;
//test.c
int  main() {
 printf("%d",g_val);
 return 0;
}

结果是g_val被输出

//add.c
static int g_val = 2018;
//test.c
int  main() {
 printf("%d",g_val);
 return 0;
}

结果是没有输出g_val.

正常情况下,不被static修饰的全局变量的作用域是整个程序也就是各个文件所构成的项目,之所以第二个不可以输出,是因为被tatic修饰以后,全局变量只能在所定义的文件下起作用,也就是代码中的add.c文件,故在test.c中无作用.
总结说就是:一个全局变量被static修饰,会使这个全局变量只能在本源文件内使用,不能被其他源文件使用

修饰函数
//add.c
int add(int x, int y){
 return x+y;
}
//test.c
int  main() {
 printf("%d",add(2,3));
 return 0;
}

正常运行

//add.c
static int add(int x, int y){
 return x+y;
}
//test.c
int  main() {
 printf("%d",add(2,3));
 return 0;
}

y运行结果出错
出错的原因是add();这个函数没有起作用在main()函数中,是因为被static修饰之后,这个函数本能被其他源文件函数所调用,这个和被修饰的全局变量可以类似,被修饰后,作用域就是自己所在的源文件.
总结就是:一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件中使用

以上就是对作用域以及生命周期的初步介绍,对static关键字的解读,欢迎补充,评价.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值