全部博文(776)
分类: C/C++
2010-12-14 15:24:59
extern(外部的):函数外部定义的变量的缺省存储方式,生命期为整个程序运行的全过程,作用域为从main()函数被调用前开始到整个程序退出时为止.存储在数据段中.当被定义时如果没有手动初始化,会自动初始化为0.
static(静态的):声明为static的变量(不论是局部程序块外部还是内部的).生命期为整个程序运程的全过程,局部程序块外部声明的作用域为从定义点开始到该文件尾部;局部程序块内部定义的作用域为从定义点开始到它所在的局部程序块尾部.存储在数据段中.
auto:在局部程序块内部定义变量的缺省存储方式.生命期为局部程序块开始执行到执行完成为止,作用域从定义点开始到局部程序块尾部.存储在栈空间中.使用时需要手动初始化,否则它是一个未定义的值.
变量的生命期还有一种就是动态分配空间的变量的生存期,它们是通过调用malloc()和calloc()函数分配空间,其生命期也就从调用这些函数开始到调用free()函数为止,作用域也同生存期.存储在堆空间中.malloc()的空间中的值没手动初始化时为一个未定义的值,calloc()分配的空间中的值没手动初始化时为0.
变量类型 生命期 作用域 存储位置 关于初始化 说明 extern 整个程序运行过程 从main()函数调用前开始整个程序退出为止 数据段中 如果程序员没有手动初始化,会自动初始化为0. 外部的 static 整个程序运行过程 如果是函数外部定义的,那么它的作用域是从定义点开始到整个程序退出; 如果是函数内部或局部程序块内部定义的,那么它的作用域是从定义点开始到函数或局部程序块尾部 数据段中 如果程序员没有手动初始化,会自动初始化为0. 静态的(包括局部的和全局的) auto 从函数或局部程序块开始执行到执行完成为止 它定义点开始到所在的函数或局部程序块尾部 栈空间 如果程序员没有手动初始化它,它将是一个未定义的值,所以使用时需要先手动初始化 局部的 动态分配空间的变量 从调用malloc()calloc()开始到调用free()为止 从调用malloc()/calloc()开始到调用free()为止 堆空间 Malloc()申请空间的变量需手动初始化,其初始值未定义;calloc()申请空间的初始值默认为0 用malloc()函数或calloc()函数申请空间的变量