嵌入式C语言静态非静态全局局部变量辨析

嵌入式C语言静态非静态全局局部变量辨析,第1张

嵌入式C语言静态非静态全局局部变量辨析

栈区 用于存放局部变量

也就是说,任何函数里面,我们定义的变量,不加任何修饰,那么这些变量都是保持在栈区里的

静态全局区 未初始化的静态全局区

静态变量(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修饰的局部变量,存储在静态存储区,在函数调用结束后,不会被释放,这个值会一直被保留下来,可以认为是具有记忆功能

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5711680.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存