作用域:

1、代码块儿作用域:

注意的是:这里面{}就代表一个代码块儿,里面的东西是独立的,不可被其他地方访问的。

2、函数作用域

3、文件作用域

先提一下

在当前有一个文件,main.c

还有一个文件比如叫做a.c

这个东西就属于文件作用域了,左边有一个变量叫做mainiii=0 在a.c里面有一个变量叫做aiii = 3.两个变量分属不同的文件,他们拥有各自的文件作用域,不能混用。

4、Auto:自动变量

一般不写就认为是auto类型的。我们通常定义的变量都属于 auto,他们都存放在 内存中,主要与register相区别。

5、Register 类型变量

使用方式: register int i=3;

是C语言建议把这个变量 i放到寄存器中,(通常情况下会放到寄存器中。但有时也不一定)用来提高当前变量的执行效率。因为是放入了寄存器,所以不提供取地址的服务。也就是说:

Register int i =3;

Int *p = &i;//这样做是不合法的,因为 已经把当前变量放入了寄存器中,在寄存器里面是没有地址的,也就没有办法取出。即使 这个变量没有真正被放到寄存器里面,也不能够去它的地址。

6、静态变量

只能在当前块儿内使用。但是在代码运行之初就完成初始化。并且一直保留直到程序结束。而非代码块执行结束。

静态变量还有一种用法,用来标识文件。

在当前目录下,main.c里面有aiii,在 a.c里面定义了 aiii=3;这样aiii拥有了全工程的范围,所以如果不希望别的地方也使用这个aiii,或者希望只在a.c里面使用aiii的话。就可以加static这个关键字。

现在有一个结果就是 aiii的值 不再是3了。

说明没有访问到a.c里面的内容。

那么0是什么情况呢?

0是由于 我们在main.c里面声明了一个 变量,这个 变量就是 全局的,全局变量默认初始化成0.所以我们得到了0的结果。

如果去掉  int aiii;的声明那么我们的访问就是 非法的了,因为 并不存在 这样一个aiii变量。

为了让我们的程序运行的更加合理,标明这个 变量到底是自己定义的,还是 外部引用的,就需要另外一个关键字extern。这个关键字在前面说,利用C++语言写一个DLL然后按照C语言编译也需要这样一个关键字。

但是这种写法是不可以的:

main.c里面说 外面有一个 aiii。在a.c里面说aiii仅当前文件可用。->其实没有aiii可用,这样编译器还在找这个 aiii,那么解析的结果就是 没有一个 靠谱的外部符号。

这个 时候 如果 去掉 static 那么运行就正常了。

并且也有合理的标识,告诉main.c 说 我这个 里面的 aiii就是 外面的,要么有,使用外面的,要么没有,报错。这样比起一个不确定的结果可0 可3的数字,要靠谱的多。

在C语言里面,写在函数外面的声明定义 就是 全局的,会默认赋初值0,如果我们没有自己定义初值的话。如果要共享这个 变量那就写 成 int i=[某个数]并且在其他的文件中写上extern表示 当前这个i是从别的文件中引入的变量;如果当前变量仅当前文件可用,那就加上static。表示 文件域。

最新文章

  1. DrawerLayout的openDrawer()和closeDrawer()方法
  2. [DEMO] 互联网广告RTB机制简介
  3. Bootstrap页面布局11 - BS表单
  4. 解决Myeclipse 编辑jsp页面卡
  5. iPad中控制器view的width和height
  6. spoj 839 Optimal Marks(二进制位,最小割)
  7. source insight3.5中文乱码解决方案
  8. CSS 3 属性学习大纲
  9. Storyboard中拖拽控件不能运行的问题(在运行的时候,相应的控件代码没有被执行)
  10. JavaScript写一个表格排序类
  11. 【原创】10万条数据采用存储过程分页实现(Mvc+Dapper+存储过程)
  12. 全面解释java中StringBuilder、StringBuffer、String类之间的关系
  13. dd命令
  14. spring boot 中 Mybatis plus 多数据源的配置方法
  15. 如何去掉ul标签的多余空白或多余大距离?
  16. StarUML添加自定义approach和profile
  17. 并发编程(二)—— CountDownLatch、CyclicBarrier和Semaphore
  18. 彻底理解cookie,session,token
  19. Go web编程学习笔记——未完待续
  20. babelrc 中的 presets 字段(env, react)和 plugins 字段(dynamic-import-webpack, transform-object-rest-spread, ...)

热门文章

  1. umask设置导致程序权限不足的问题
  2. longblogV1.0——我的静态博客发布系统
  3. 查表法计算CRC16校验值
  4. mvc5经典教程再补充。。
  5. ActivityNotFoundException: No Activity found to handle Intent
  6. Java中finalize方法用途何在?
  7. Android实例-如何使用系统剪切板(XE8+小米2)
  8. 如何使用IAR仿真环境查看CPU类型字长?
  9. [二]JQueryMobile常用的组件介绍
  10. java properties 文件中书写相对路径