20201026-成信大-C语言程序设计-20201学期《C语言程序设计B》C-关于static关键字的读解

本文详细解析了C语言中static关键字的功能与应用。包括static作用于变量时对作用域及生命周期的影响,以及static限定函数调用范围的具体实现。通过代码示例展示了静态局部变量的记忆特性。

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

20201026-成信大-C语言程序设计-20201学期《C语言程序设计B》C-关于static关键字的读解

字面意思:静态
可以作用的对象:变量,函数

作用于全局变量 - 强调作用域

这时,它的作用,主要是限定这个全局变量的作用域是在本源文件内使用,强调的是一个变量的作用域的概念。

  • 防止多个文件里,出现相同的全局变量名的冲突
  • 限定使用空间范围
  • 只能在所在的文件内使用

作用于局部变量 - 强调生命周期

这时,它的作用,就是典型的常用的静态局部变量

  • 它有记忆性【即上一次用过之后,里面存的是什么值,下一次用时,还是什么值,不会再被初始化】
  • 它只能被初始化一次,即定义时,第一次分配内存时,就完成初始化动作,以后不再再被初始化,但可以再被赋值
  • 本质上,就是因为内存一旦分配,就锁定了,生命周期会一直伴随整个程序的结束才结束,这就是静态的真实含意
  • 当再一次使用这个变量时,就直接取对应内存空间里的值出来使用即可【这个值,不可以再次被初始化,也就是说,它会一直保持之前的值】

作用于函数

仍然是一个作用域的强调,表示这个函数只能在本源文件中调用

示例讨论

#include <stdio.h>

int myfun(int a);

int main(void)
{
    for (int i = 0; i < 5;i++)
    {
        // 每一次传进去的值都是 5 
        printf("\nmain中的myfun返回值:%d\n", myfun(5));
    }
    
    return 0;
}
/* 
    演示函数 
    vscode 常用编辑快捷键
    ctrl+d 删除一行
    ctrl+下 复制一行
    alt+下 移动一行
    shift+alt+A 给出块注释
 */
int myfun(int a)
{
    static int b = 50;   	// 静态变量,定义时就完成初始化,一定要用常量来初始化 
//    int b = a;   			// 自动变量
	
    printf("\n局部定义的静态变量b初始值:%d", b);
    b--;
    printf("\n局部定义的静态变量b自减后:%d", b);// ctrl+向下 复制一行; alt+向下 移动一行

	b += a; 
	
    return b;
}

运行的结果如下

局部定义的静态变量b初始值:50
局部定义的静态变量b自减后:49
main中的myfun返回值:54

局部定义的静态变量b初始值:54
局部定义的静态变量b自减后:53
main中的myfun返回值:58

局部定义的静态变量b初始值:58
局部定义的静态变量b自减后:57
main中的myfun返回值:62

局部定义的静态变量b初始值:62
局部定义的静态变量b自减后:61
main中的myfun返回值:66

局部定义的静态变量b初始值:66
局部定义的静态变量b自减后:65
main中的myfun返回值:70

--------------------------------
Process exited after 0.05156 seconds with return value 0
请按任意键继续. . .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值