美文网首页
Chapter 3 Data

Chapter 3 Data

作者: 再凌 | 来源:发表于2020-01-12 22:04 被阅读0次

extern 和 auto

首先我们先要区分 声明, 定义和赋值的区别

声明, 仅仅代表这个变量在本作用域内可用, 但是系统没有为其分配空间, 如:

extern int i;
//这里代表i在(本文件)之后的区域都是可用的,但是内容来自于哪? 不知道, 还得看头文件

定义, 代表系统为这个变量分配了内存空间, 但是空间内的值是未知的

int i;
//此时, 系统为i开辟了int大小的内存空间, 但是没有赋值

赋值就很简单了

int i = 0;
// 这一条语句又定义, 又赋值

函数体外的变量5都是extern的, 但是如果有需要, 写上extern也无妨, 便于阅读嘛,让大家知道这个变量是在别处被定义的

static的两种情况

当声明的static变量在任何函数体外的时候, static表示局部, 即, 该变量不能被其他文件的extern所使用

当生命的static变量在函数体内的时候, 表示该变量是静态的, 不会因为函数的销毁而消失, 而是, 在即使函数被重新调用的时候, 仍然保持上一次的值.

值得一提的是, static的变量不是分配在堆栈中,而是直接在内存中, 甚至在执行的时候, 不会额外占用汇编语句的操作实践, 而是直接在程序被打开的时候装填入内存. 其实, 在函数区外的变量, 都是在内存中.


在栈中的变量有两个好处. 第一, 动态分配内存, 只有被调用的时候才分配内存, 这样可以大大节约. 第二, 栈中数据的处理效率更高.

相关文章

网友评论

      本文标题:Chapter 3 Data

      本文链接:https://www.haomeiwen.com/subject/azfwactx.html