【C语言】c语言中auto、static、extern关键字作用及其对变量和函数的作用

auto自动的修饰符

  auto区分局部变量和全局变量

  auto表示动态的分配存储空间数据,数据存储在动态存储区中

  函数中的形参和在函数中定义的局部变量包括在复合语句中({}内)定义的局部变量均属于auto修饰变量

  使用该修饰符后,系统会给这些变量分配存储空间,在函数调用结束时就自动释放这些存储空间(局部变量),auto可以省略,大部分变量都是auto自动类型

  被auto修饰的变量不在编译时赋初值,而是在函数调用时进行赋初值每一次函数调用重新给一次初值,相当于执行一次赋值语句

  若定义变量时不赋初值(不初始化),他的值是一个不可预测的数值(垃圾值)

static静态的修饰符

  static修饰符使函数值或变量在原本作用域结束后不消失继续保持原值,其占用的储存单元不释放,下一次调用还是原有值

  静态局部变量、静态全局变量、静态函数均属于静态储存类别,在静态储存区内分配储存单元,在程序运行过程中不释放,且在编译时赋初值,运行期间只赋初值一次(重复执行赋值语句时,只有第一次有用),不初始化系统赋初值(如果定义不赋初值,则编译时自动赋值0或空)

  静态局部变量在函数调用结束后依然存在,但是其他函数是不能引用他的,只能被定义他的函数调用

register寄存器的修饰符

  将局部变量的值放在CPU寄存器中(若该变量使用频繁则定义为 register)

extern外部声明修饰符

   extern修饰符用作声明,可以对变量和函数做声明,标准的函数声明和变量都需要使用extern关键词修饰,但是该声明可以省略(在定义时会自动添加extern)

  1. 变量的定义和声明

    变量实际上和函数一样也是可以先声明再使用,但是过于麻烦所以在定义时自动声明

  引用性声明(声明)
    引用性声明不需要建立储存空间(不分配内存空间)如:extern a

  定义性声名(定义)
    定义性声名指建立储存空间如int a
2.内部函数和外部函数

  函数的本质是全局的,不加函数声明的话一个文件中定义的函数可以被其他文件的函数调用

  内部函数
     内部函数只能被本文件函数调用的函数,函数类型和函数名前面加static(静态函数)修饰
  外部函数
     外部函数可以被其他文件函数调用,函数首部前加extern(定义函数时可以省略,默认为外部函数)修饰

动态存储和静态存储

动态储存

  动态储存是指在程序运行期间根据需要进行动态的分配

  函数形参,自动变量(没有用static声明的变量),函数调用时的现场保护和返回地址,对以上这些数据,在函数调用开始时分配动态存储空间,函数结束时释放这些空间,这种分配和释放,是动态的,如果在一个程序中两次调用同一个函数,则分配的局部变量的储存空间可能是不相同的

静态储存

  静态储存是指在程序运行期间由系统分配固定的存储空间

  全局变量和静态变量(用static声明的变量)全部存放在静态存储区中,在程序开始执行时,给变量分配存储区,程序执行完毕才释放

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

列队猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值