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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值