分类: C/C++
2011-03-09 11:02:36
一、auto
auto称为自动变量。
局部变量是指在函数内部说明的变量(有时也称为自动变量)。用关键字auto进行说明, 当auto省略时, 所有的非全程变量都被认为是局部变量。
存储在内存的堆栈区,属于临时性存储变量,并不长期占用内存,可以被多次覆盖。
局部变量在函数调用时自动产生, 分配内存,作用范围只在定义了它本身的该函数内部,或者for,while循环等复合语句内部,其值不会传递给其他函数,其他函数也无法使用该局部变量,随函数调用的结束, 这个变量也就自动消失了,其值也不复存在, 回收内存。
二、static
static称为静态变量。根据变量的类型可以分为静态局部变量和静态全程变量。
static一般存储在数据区,这类变量在数据说明时被分配了一定的内存空间,程序运行期间,它占据一个永久的存储单元,因此在对出函数后,存储单元中的值仍旧保留。简单说,程序运行时static型变量的值可以被语句改变,但当程序运行结束后,其值又变回原来的值。
1. 静态局部变量
它与局部变量的区别在于: 在函数退出时, 这个变量始终存在, 但不能被其它函数使用, 当再次进入该函数时, 将保存上次的结果。其它与局部变量一样。
2. 静态全程变量
静态全程变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量。它与全程变量的区别是: 全程变量可以再说明为外部变量(extern), 被其它源文件使用, 而静态全程变量却不能再被说明为外部的,即只能被所在的源文件使用。
三、extern
extern可以置于全局变量或者函数前,以表示变量或者函数的定义在别的文件中,提示遇到此变量和函数时在其他模块中寻找其定义
四、register c语言全局变量和局部变量 1,不同函数内的局部变量可以重名,互不影响 2,局部变量和全局变量也可以重名,在局部变量的作用范围内,全局变量不起作用 3,全局变量的初始化只能有一次,并且是在对其申明时进行初始化 疑点解析: 1,全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错 2,static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。 从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。并且使用后其值又自动恢复。 static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用; static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值; static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝. 3、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在于(
堆)中
register称为寄存器变量。只能在函数中定义,并只能是int和char型。定义符register说明的变量被Turbo C2.0存储在CPU的寄存器中,而不是象普通的变量那样存储在内存中,这样可以提高运算速度。但是Turbo C2.0只允许同时定义两个寄存器变量,一旦超过两个,编译程序会自动地将超过限制数目的寄存器变量当作非寄存器变量来处理。因此,寄存器变量常用在同一变量名频繁出现的地方。
另外, 寄存器变量只适用于局部变量和函数的形式参数, 它属于auto型变量,因此,不能用作全程变量。定义一个整型寄存器变量可写成:
register int a;