c语言中static的作用(面试经常问)

本文详细解释了C语言中static关键字的作用及其应用场景。包括static变量的生命周期、存储位置、初始化特性,以及static函数的作用域限制等内容。

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

static是用来说明静态变量的,放在在静态储存区(既不是堆也不是栈)。

一、如果是在函数外面定义的,那么其效果和全局变量类似,即static说明的变量可以在当前c程序文件使用。(如果是普通的全局变量,那么他在多个源文件中都有效,另:全局变量存在静态存储区)。同理,static声明的函数也只在本源文件有效,称为内部函数。

二、如果是在函数内部定义的,那么这个变量只初始化一次(即只赋值一次),后续再调用这个函数,这个static的变量不会再初始化,于是这个变量就会一直保存,我们再次调用时,仍是保存上一次的调用结果(即不会被程序自动清除)。

c语言中的static有三个主要作用:

1、隐藏性。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。

2、static可以保持变量内容的持久,当static定义变量在函数内部时,改变量值的生命周期和全局变量相同。

3、static可以令其定义变量内存区所有字节默认初始化为0,这一特点可以省去程序员许多麻烦,减少工作量。

内存分配:

BSS

通常是指内存中存放程序中未初始化的全局变量与静态变量的区域,BSS属于静态内存分配。

数据段

通常是指内存中存放程序中已经初始化的全局变量与静态变量的区域,数据段属于静态内存分配。

代码段

代码段通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

堆区

动态分配的内存区,大小不固定,需要程序员手动分配malloc,手动释放free。

是用户存放程序临时创建的局部变量,{}内定义的变量,由OS自动分配释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值