黑马程序员——C语言之全局变量和局部变量以及static和extern修饰符的作用

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


概述:本小结着重讲解

1.全局变量和局部变量的差别

     2.加上static 、 extern后分别对全局变量、局部变量、函数的影响。


变量的作用域小结:

变量的作用域可分为全局变量和局部变量

1.全局变量

a.定义:在函数外面定义的变量。

b.作用范围:从变量定义哪一行开始,到本文件的结尾。

c.生命周期:从变量定义哪一行开始得到分配的存储空间,直到程序运行结束了,内存空间才被回收。

 

2.局部变量

a.定义:在函数(代码块)中定义的变量。

b,作用范围:从变量定义的哪一行开始,到该代码块的结束。

c.生命周期:从变量定义的哪一行开始得到分配的空间,直到该代码块结束,内存空间被回收。

 

如上全局变量和局部变量概念一般很好理解,就不举例子了。下面重点要讲解C中的static 、extern关键字分别对全局变量、局部变量、函数的影响。

 

需要注意的是,作为原本学习java的程序员,习惯了public、protected、friendly、private等等作用范围的修饰符,而C中没有这里,却有 static 、 extern 的关键字,理解清楚这2个关键字对于C中变量的作用范围的影响很重要。

1.全局变量搭配static后,可分为2种

a外部变量:定义的变量能被本文件和外部文件访问的变量。(默认的全局变量就是外部变量)

b内部变量:定义的变量只能被本件访问,不能被其他文件访问。(使用static修饰)

如:

static int a; 定义的全局变量只能在本文件中使用。

int a ; 定义的全局变量默认就是外部变量。

加上关键字 extern int a; 意思就是 声明了一个外部变量。

2.局部变量搭配static后,可分为2种

         a不加static修饰,函数或者代码块中的变量在函数或者代码块执行完毕后就直接回收销毁了。每次执行都会重新分配内存,每次都会销毁。

         b加上static修饰,函数或者代码块中的变量在函数或者代码块执行第一次初始化时分配内存后,就算函数或者代码块执行完了,该变量也不会被回收销毁,直到程序结束static变量才会被回收。

 

局部变量使用static的例子:

#include <stdio.h>
void show();
void main(){
         show();
         show();
         show();
}
void show(){
         int a = 0;
         static b = 0;
         printf("a=%d,b=%d\n",a++,b++);
}

运行结果:



函数的作用域小结:

对于函数而言,C中没有public、protected、friendly、private的修饰符,只有static、extern的修饰符。因此,重点要关注这2个修饰符对函数的影响。

 

函数搭配static后,可分为2种

1.外部函数:

       定义的函数能被本文件和其他文件访问,默认情况下所有函数都是外部函数。

2.内部函数:

       定义的函数只能被本文件访问,外部文件无法访问。

 

例子:

定义一个外部函数

方法一: voidshow() {}                  默认就是extern的形式。

方法二: externvoid show(){}        

声明一个外部函数

方法一: voidshow();                      默认就是extern形式

方法二: externvoid show();            

 

定义一个内部函数

static void show(){}                           此时该函数就不能被外部文件访问了。

声明一个内部函数

static void show();

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值