一、变量种类:
外部变量
局部变量
全局变量
自动变量
寄存器变量
静态变量
1)外部变量可以在全局范围内访问,因此函数间可以通过外部变量交换数据,而不必使用参数表;
2)外部变量在程序执行期间一直存在;
3)外部变量必须定义在所有函数之外,且只能定义一次,定义后编译程序将为它分配存储单元;
4)在每个需要访问外部变量的函数中,必须声明相应的外部变量,说明其类型。声明是可以用extern语句显示声明,也可以通过上下文隐式声明
2. 自动变量(auto int a=8;)
什么是自动变量:定义在函数体内部的变量,也叫私有变量或者局部变量。
作用域:仅限于定义它的函数体内部,函数中的每个局部变量只在函数被调用时存在,在函数执行完毕退出时消失。
3. 静态变量
定义:以static存储类声明的变量。
static的两种声明:
1)用static声明限定外部变量与函数,可以将其后声明的对象的作用域限定为被编译源文件的剩余部分。通过static限定外部对象,可以达到隐藏外部对象的目的。
2)用static声明自动变量,声明后的对象的存储方式变为静态存储方式,它与自动变量的不同是,不管其所在的函数是否被调用,它一直存在,而不像自动变量那样,随着所在函数的被调用和退出而存在和消失
4. 寄存器变量
register int x;
register char c;
以上就声明了两个寄存器变量,register告诉编译器,它所声明的变量使用频率较高。其思想是将register声明的变量放到机器的寄存器中,这样可以使程序更小、执行速度更快,但编译器可以忽略此选项。
注意:
1)register声明只适用于自动变量及函数的形式参数;
2)过量的register声明并没有什么坏处,因为编译器可以自动忽略过量或者不支持的寄存器变量声明;
3)无论寄存器变量最终是否放到了寄存器中,它的地址都是不可以访问的。
5. 全局变量和局部变量
在某些地方我们会看到全局变量和局部变量的定义,其实它们对应的就是外部变量和自动变量。
全局变量与外部变量的区别是全局变量是作用于程序中的所有地方,它是不加static的外部变量。
局部变量则与自动变量的定义完全一样
#include <stdio.h>
int i; //外部变量
static int j; //静态变量
int main()
{
int i; //自动变量,该变量会屏蔽外部变量i
static int k; //静态变量
register int x;//寄存器变量
return 0;
}
摘自:http://blog.csdn.net/qq_16923717/article/details/77483548