全局变量
特点:
-
定义在所有函数之外
-
在main函数执行前就被分配内存,作用域是整个程序,也就是整个文件部分。使用extern关键字后才可以跨文件使用
-
内存分配在静态存储区域
-
局部变量
-
定义在函数内部
-
作用域是函数内部,一般以一对大括号为基准划分一个作用域
-
函数被使用完后,其内存就会被回收,下次再调用函数的时候,内部的局部变量仍然被初始化了。
-
内存分配在栈区
-
register变量(寄存器变量)
-
是一种局部变量
-
关键字是register
-
register变量不可能被得到地址
-
register变量只能在一个块中声明,不可能有全局/静态register变量
-
尽量避免使用
-
static变量
-
修饰后的变量的值在程序中不可以改变(暂时这样理解就行)
-
修饰局部变量时,防止多次调用函数对局部变量的初始化(初始化一次)
-
修饰全局变量时,与普通全局变量区别是只可以初始化一次。
-
修饰局部变量时,该常量本质是静态局部变量,不是全局变量也不是常量
-
静态局部变量作用域仍然是其函数内部,别的函数不可以用,但是生命周期与全局变量一样是整个程序
-
若一个程序由多个源文件组成,全局变量可以被多个源文件使用,那么static全局变量只可以被定义自己的文件使用,static限制了变量的作用域。
-
外部变量
-
定义在别的文件/main函数下面的变量
-
加extern关键字后才可以正常使用
-
const常量
-
不管是内部/用户定义的数据类型都可以使用const
-
const告诉编译器这个名字是常量
-
c++中一个从const必须有初始值
-
空间分配
全局变量、静态全局变量、静态局部变量都在静态存储区分配空间,局部变量在栈区分配空间
-
-
-