- 静态存储区:存放全局变量和静态变量,在执行程序前分配存储空间,占据固定的存储单元。
- 动态存储区:存放函数的局部变量、函数的返回值、行参等。
存储类别分类:
- 自动(auto)非静态变量的局部变量即为自动变量。在C语言中,函数内没有存储类别说明的变量均视为自动变量。
- 寄存器(register)使用寄存器变量是为了提高执行效率,因为频繁地从内存单元存取变量相比于从寄存器中存取变量需要消耗更多的时间。只有局部变量才可以定义成寄存器变量。但不能大量使用寄存器,因为寄存器的数目有限。
- 静态(static)静态变量不属于动态存储,属于静态存储。静态局部变量的生存周期虽然是从程序开始运行到程序运行结束,但是它的作用域仍然与其作为自动变量的作用域相同。静态全局变量,只能在被定义的..c文件中使用,不能被其它.c文件中的函数调用。静态局部变量在它所在的函数被执行时进行初始化,之后再次执行该函数时,该静态局部变量不再进行初始化,保存的是上一次的运算结果。静态全局变量的初始化是在执行main()函数之前完成的,其静态全局变量的当前值由最近一次对它的赋值操作来决定。
- 外部(extern)外部存储类别定义方式为在全局变量类型前面加上关键字extern,如果没有指定全局变量的存储类别,则默认为extern。
如何区分const char*p 和char* const p?