C语言static关键字的作用

本文详细解释了static修饰符在C/C++中的三种使用场景:修饰函数或全局变量时改变其链接属性;修饰局部变量时使其变成静态存储类型;并对比了全局变量与静态变量的区别。

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

一:当static修饰函数或者代码块之外的变量时
改变的是函数或全局变量的链接属性,外部链接属性变为内部链接属性,而存储类型和作用域不受影响。
换句话说,被static修饰的函数或全局变量,只能在当前源文件中访问。

二:当static修饰代码块内部的局部变量时
在函数中定义局部变量,如果没有被声明为其他类型的变量都是自动变量,自动变量属于动态存储类型,函数调用结束后即被释放。
但有时候需要时在调用函数中的某个局部变量后,该变量的依旧存在,并且值也不变,在下次调用该函数时,变量中的值是上次调用该函数结束后变量的值。这是就可以用static修饰变量,使之变为一个静态变量。

三:全局变量和静态变量的区别
1.静态变量存储在静态区,在程序运行的整个过程都存在;而自动变量是在动态存储区分配存储单元,函数运行结束后随即被释放。
2.静态变量是在编译时赋初值,只能赋值一次,不管调用几次函数,静态变量不会变;而自动变量是在函数调用时赋值,每一次调用函数都会被重新赋值。
3.若静态变量没有赋初值,则默认为0或空;而如果自动变量未赋初值,会默认为随机值。

举个例子:

int i = 1;//全局变量,外部链接属性
static int j = 1;//i和j都在数据段(静态区),但链接属性不一样,static修饰的j在外部文件不可见

void test()
{
    static int k = 1;//j和k都是static修饰的,生命周期一样,但作用域不一样,static不改变变量的作用域
    int n = 1;//k和n的生命周期不一样,作用域一样
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值