A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

static 与 extern

1.     static和extern


     这是我们C语言中的两个关键字,是用来修饰变量和函数。


     1)static和extern修饰局部变量的效果
     2)static和extern修饰全局变量的效果
     3)static和extern修饰函数的效果


2.     static修饰局部变量的效果


     1)如果我们的局部变量被static修饰,这个变量就叫做静态变量。
     2)静态变量不再存储在栈区,而是存储在常量区。
     3)当函数执行完毕之后,这个静态变量不会被回收。下次再执行函数的时候,就会拿来继续使用。
     4)static修饰的静态变量,函数结束不会被回收,仍然存在,函数无论执行多少次,这个静态变量只有1份。


3.     extern不能修饰局部变量!


4.     全局变量


     1)写1个函数,最完整的步骤应该分两步:
          —> 先写函数的声明
          —> 再写函数的实现
     2)我们写1个全局变量,最完整的步骤应该也分为两步:
          —> 先写全局变量的声明
               只定义全局变量,而不赋值,这个就叫做全局变量的声明。
               int num;

          —> 再写全局变量的定义
               定义全局变量并初始化,也叫作全局变量的实现。
               int num = 10;
          这个时候,全局变量的声明可以放在使用这个全局变量的前面,全局变量的定义可以放在使用全局变量的后面。
          这个时候,仍然可以正常取值。
     3)全局变量只有声明,没有定义,那么这个时候编译器会自动去帮助我们实现这个全局变量。
          也就是自动的将这个全局变量初始化为0。
     4)全局变量也可以只有定义,而没有声明,但是这个时候,这个全局变量的定义必须要在使用这个全局变量之前。


5.     其他模块写全局变量的注意问题:


     1)全局变量的声明要写在.h文件中
     2)全局变量的实现要写在.c文件中
     3)如果将这个全局变量定义在模块当中,这个全局变量就必须要使用static或者extern来修饰!


     注意:

     如果定义在模块中的的全局变量,使用extern修饰,这个模块中的全局变量,就可以跨模块访问!
     如果定义在模块中的的全局变量,使用static修饰,这个模块中的全局变量,就只能在当前模块访问!其他模块无法取到该模块中的这个全局变量。


6.     static和extern修饰函数


     1)如果函数被extern修饰,那么这个函数可以跨模块调用。
     2)如果函数被static修饰,那么这个函数只能在当前模块中调用,无法跨模块调用!


     如果函数没有写static或者extern修饰,那么这个函数默认就是extern,可以跨模块访问!



4 个回复

倒序浏览
都没人顶…挽尊!你好像是我们班的吧
回复 使用道具 举报
小鱼闯江湖 发表于 2016-9-24 23:43
都没人顶…挽尊!你好像是我们班的吧

好像是把。你是哪班的?
回复 使用道具 举报
梦里花落知多少s 发表于 2016-9-25 16:48
好像是把。你是哪班的?

深圳1306啊…………
回复 使用道具 举报

好吧,我是北京校区的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马