【C语言】static关键字的作用和其他关键字的简单介绍:

一.C语言的32个关键字

根据他们的作用,分为数据类型关键字、控制语句关键字、存储类型
关键字和其他关键字四类。


数据类型关键字(12个)

  1. char :声明字符型变量或函数返回值类型
  2. short :声明短整型变量或函数
  3. int: 声明整型变量或函数
  4. long :声明长整型变量或函数返回值类型
  5. float:声明浮点型变量或函数返回值类型
  6. double :声明双精度浮点型变量或函数返回值类型
  7. signed:声明有符号类型变量或函数
  8. unsigned:声明无符号类型变量或函数
  9. void :声明函数无返回值或无参数,声明无类型指针
  10. enum :声明枚举类型
  11. struct:声明结构体类型
  12. union:声明共用体类型

控制语句关键字(12个)

  1. 条件语句(3)
    if:条件语句
    else :条件语句否定分支(与 if 连用)
    goto:无条件跳转语句
  2. 循环语句(5)
    for:一种循环语句
    do :循环语句的循环体
    while :循环语句的循环条件
    break:跳出当前循环
    continue:结束当前循环,开始下一轮循环
  3. 开关语句(3)
    switch :用于开关语句
    case:开关语句分支
    default:开关语句中的"默认"分支
  4. 返回语句 (1)
    return :子程序返回语句(可以带参数,也可不带参数)

存储类型关键字(4个)

  1. auto :声明自动变量
  2. extern:声明变量或函数是在其它文件或本文件的其他位置定义
  3. register:声明寄存器变量
  4. static :声明静态变量

其他关键字

  1. const :声明只读变量
  2. sizeof:计算数据类型或变量长度(即所占字节数)(没想到吧,我既是操作符,也是关键字)
  3. typedef:用以给数据类型取别名
  4. volatile:说明变量在程序执行中可被隐含地改变

今天的目标是static关键字,其他关键字在后边会讲到


二.static关键字

这是今天要讲的重点,但得先介绍下

变量在内存中的存储

在这里插入图片描述
在这里插入图片描述
不同变量存储在不同的空间。
在栈区的变量的特点是进入作用域创建,出了作用域就销毁;而静态区的变量创建后直到程序结束后才释放。

变量的属性

变量有两种属性,包括外部链接属性和内部链接属性。
外部链接属性:变量可以在不同源文件中使用,但是得用extern声明。内部链接属性:变量只能在本源文件中使用。具有外部链接属性的变量也具有内部链接属性。一般全局变量具有外部链接属性,局部变量具有内部链接属性。


好了,介绍完毕,开始今天的正文。

static(静态的)

修饰局部变量

在这里插入图片描述

在这里插入图片描述
为什么两张图会出现不同的结果?
原因是:普通的局部变量放在栈区,它进入作用域创建,出了作用域就销毁。所以前张图每次调用函数时,j变量创建,调用结束后变量销毁,j的值每次都被初始化;而后张图的局部变量被static修饰,被放在静态区,直到程序结束后才释放,所以变量j只被初始化一次。
本质static的修饰改变了局部变量的存储位置,因为存储位置的不同,导致执行效果不同。被static修饰不影响原来作用域的范围,但变量的生命周期变长:直到程序结束才销毁。

修饰全局变量

在这里插入图片描述

我们都知道全局变量具有外部链接属性,在不同的源文件使用它必须使用extern声明,表示这个变量在其他源文件中已定义。
但如果我们在声明变量的地方使用static会产生什么反应?在这里插入图片描述
这个变量在static的修饰下就不能在其他文件中使用,从外部链接属性变成内部链接属性。
本质static使全局变量的外部链接属性变成内部链接属性,改变了全局变量的作用域,但不改变它的生命周期。
当你不想要其他源文件使用这个源文件中的全局变量,你可以使用static修饰它。

修饰函数(类似于全局变量)

其实函数本身具有外部链接属性,在其他源文件使用也得使用extern声明。在这里插入图片描述
那在定义函数的位置使用static修饰会有什么效果?在这里插入图片描述
被static修饰的函数不能再其他源文件中使用,从外部链接属性变成内部链接属性。
本质static改变了函数的外部链接属性,使它不能在其他源文件中使用。


今天的关键字就介绍到这,如果还有什么不懂的地方可以告诉我,我会尽己所能的帮助你。但如果我有什么地方讲的不对,请多多指正。感谢!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值