C语言中static关键字以及各类变量的初始化问题

本文详细介绍了C语言中static关键字的用法,包括修饰全局变量和局部变量时的不同作用,以及如何限制函数的作用域。同时,文章阐述了不同类型的变量在内存中的静态区、常量区、栈区和堆区的存储情况,帮助读者理解C语言的内存管理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

static是“静态”的意思;

static关键字在C语言中可以用来修饰变量和函数;

1.修饰变量;

        (1)static修饰的全局变量叫做静态全局变量,它的作用域是当前源文件,在其它文件中即使是使用“extern”关键字也不能引用;静态全局变量在定义时如果不赋初值,会默认初始化为0(只在编译完成后初始化一次),存在于内存分区中的静态区;

        (2)static修饰的局部变量叫做静态局部变量,它的作用域是在当前函数(或者说是局部代码段),静态局部变量在定义时如果不赋初值,会默认初始化为0(只在编译完成后初始化一次),存在于内存分区中的静态区;

2.修饰函数;

        static修饰函数表示函数的作用域只在当前文件中,一般用于不想将函数对外开放,只将其用于在当前文件中实现其他函数所用的情况;

3.补充;

        刚才在说static修饰变量时,说了内存分区中的静态区,静态区是用于存储静态变量(静态全局变量和静态局部变量)和普通全局变量(没有被static和const修饰的)的,下面说一下其他的分区(简单来说有4大内存分区);

        常量区:存放字符串常量和被“const”修饰的全局变量,这些变量都是常规手段下不可改变的;生命周期一直到程序结束,由操作系统进行回收;

        静态区:存放全局变量和static变量,这些变量只初始化一次(在编译完成之后);生命周期一直到程序结束,由操作系统进行回收;

        栈区:存放局部变量,这些变量的生命周期比较短,由操作系统进行分配并回收;注意局部变量在定义时,如果没有进行赋初值,那它将会是一个随机值(即上次这块内存使用完被操作系统释放之前的值);

        堆区:堆区由操作系统维护,但是由程序员进行分配和使用的,用malloc函数向操作系统进行申请,使用完毕后,用free函数进行释放;如果程序员在使用完毕后,没有进行释放,那就会造成内存泄漏,一直到程序结束后,操作系统会对没有释放的堆区内存进行回收;注意堆区的内存在申请成功之后,初始值为0;

  以上详细介绍了static关键字和C语言中各类变量类型对应的内存分区,我也是一名小白,关于内存分区,个人感觉在初学C语言时,理解困难很正常,等到C语言基础知识都过一遍再回过头来理解就好多了;

本人小白,有错误还请老师指出来,感激不尽;支持转载,也请注明出处;

Try harder,you can do this!

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值