栈区 用于存放局部变量
也就是说,任何函数里面,我们定义的变量,不加任何修饰,那么这些变量都是保持在栈区里的
静态全局区 未初始化的静态全局区
静态变量(static修饰的变量)或全局变量(在主函数外,不属于任何函数的变量),未经过初始化,则存在此区
初始化的静态全局区全局变量,静态变量,赋过初值的,存放在此区
代码区
存放代码
文字常量区
存放常量
普通的全局变量
在函数外部定义的变量,只要是在main函数外,包括其他子函数外的变量,就是全局变量
作用范围:程序的所有地方,可以在程序的任何使用使用,但是在使用之前需要进行声明
如果是同一个.c文件中是不需要声明的,但是如果想要这个全局变量在其他文件中使用,则需要加上extern关键字进行声明,即:extern int num;
注意,此时是声明,不要赋值
例如:
int num = 100; int main(){ return 0; }
生命周期:在程序运行的整个过程中,一直存在,直到程序结束
定义的普通全局变量,未初始化则默认为0
普通全局变量可以在程序的任意一个位置对齐进行读写
静态全局变量static限定了静态全局变量只能在定义了它的.c文件中有效
普通全局变量只需要extern修饰就可以在其他文件中对其进行读写,但是静态全局变量不行
生命周期:在整个程序的运行过程中都存在
不初始化,默认为0
普通局部变量在函数内部定义的,或在复合语句中定义的变量
int main(){
int num;// 局部变量
}
作用范围:
只在当前函数中有效,或者说只能在当前的大括号内使用
生命周期
在函数调用之前,局部变量不占用空间,调用函数时才为局部变量开辟空间,函数结束,局部变量释放
静态局部变量静态,说明是static修饰的
局部变量,说明是在函数内部定义的
即,定义在函数内部的静态变量
在定义的函数或复合语句中有效
生命周期:
第一次调用函数时,为其开辟空间赋值,函数结束后不释放,以后再调用这个函数时,不再为其开辟空间,也不赋值,用的还是以前那个
static修饰的局部变量,存储在静态存储区,在函数调用结束后,不会被释放,这个值会一直被保留下来,可以认为是具有记忆功能
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)