变量

从变量定义的位置来看有局部变量和全局变量,变量定义的位置决定了他的作用域
局部变量:只在所定义的复合语句内有效,系统不给赋初值;
全局变量:整个程序内有效,没初始化时系统初始为0;
当函数中全局与局部同名时优先使用局部变量。

从变量的存储类型来看有自动型(auto),静态型(static),外部变量(extern),寄存器型(register),存储类型决定了他的生命周期
自动型:只有局部变量才能定义为自动型。自动型变量系统没赋值的时候系统不会给它初始化。函数调用时在栈上自动改分配空间,返回时释放。
静态型:包括所有的全局变量和static修饰的局部变量,他们存放在内存的静态区中。static变量初始化过的放在date段,未初始化的存放在bss段,对于动态全局变量遵循动态变量的    原则,编译的时候不分配大小,链接生成可执行文件的时候才在bss分配。buss段在生成可执行文件中不占大小,运行的时候才分配。生命周期从程序开始到程序结束。
外部型:由全局变量演化而来,可以跨文件调用。因为全局变量可以被整个程序的所有函数引用,如果在每个文件都定义一次,那么在连接的时候会发生变量多次定义的链接错误,而    如果不定义,那么在单个文件编译的时候会发生语法错误,为了解决这个问题引入了外部变量。即全局变量只需要在一个文件中定义,其他文件引用的时候用extern将变量声    明为外部参照型即可。生命周期遵循全局变量的原则。
寄存器型:存储在硬件寄存器中的变量,称为寄存器变量。寄存器变量比存储在内存中的变量访问效率更高。因为寄存器变量本身就是自动变量,所以函数中的寄存器变量在调用该函    数时占用寄存器中存放的值,当函数结束时释放寄存器,变量消失。寄存器变量只限于int、char和指针类型变量使用(寄存器资源宝贵)。

原文地址:https://www.cnblogs.com/yiyutianran/p/3826689.html