C语言学习笔记:存储类

✨博文作者:烟雨孤舟
💖 喜欢的可以 点赞 收藏 关注哦~~

✍️ 作者简介: 一个热爱大数据的学习者

✍️ 笔记简介:作为大数据爱好者,以下是个人总结的学习笔记,如有错误,请多多指教!

目录

简介

auto 存储类

register 存储类

static 存储类

extern 存储类

总结


简介

 存储类定义 C 程序中变量/函数的的存储位置、生命周期和作用域。这些说明符放置在它们所修饰的类型之前。C 程序中可用的存储类:auto、register、static、extern

变量的生存周期:全局变量生命周期一般一直存在,局部变量的变量一般在作用的函数内被调用是才分配存储单元,一旦函数调用结束,分配单元就会被收回。

程序运行时的存储空间会被分为代码区和数据区,数据区又分为静态存储区和动态存储区。根据生命周期存储类别分为静态存储方式和动态存储方式。
静态存储方式:是指程序运行期间分配固定的存储空间的方式。
动态存储方式:是指程序运行期间根据需要进行动态分配存储空间的方式。
变量除了有数据类型的属性外还有存储类别的属性。
变量定义的一般形式:
    存储类标识符 数据类型标识符 变量名;
存储类定义程序中变量和函数的存储位置、生命周期和作用域。说明符需放置在所修饰的类型之前,C程序中可用的存储类有auto(自动变量)、register(寄存器变量)、static(静态变量)、extern(外部变量)

局部变量:
         auto:自动变量,离开定义函数立即消失
        register:寄存器变量,离开定义函数立即消失
        static:静态变量,离开定义函数仍然存在    
         局部变量只作用于该函数内部
全局变量:
        在程序运行期间一直存在
        static:静态变量,仅限于本文件内部条用
        extern:外部存储变量,用于声明本文件将要用到的其他文件的变量

auto 是局部变量的默认存储类, 限定变量只能在函数内部使用;
extern 表示全局变量,对程序内所有文件可见,类似于Java中的public关键字
register 代表了寄存器变量,不在内存中使用;
static     是全局变量的默认存储类,表示变量在程序生命周期内可见;

auto 存储类

自动存储类型修饰符auto存储类是所有局部变量默认的存储类。定义在函数中的变量默认为auto存储类,这意味着它们在函数开始时被创建,在函数结束时被销毁。
auto指定一个局部变量为自动的,每次执行到定义该变量的语句块时会动态分配存储空间,数据存储在动态存储区中,在函数调用结束后自动释放这些存储区间。
{//以下是两个带有相同存储类的变量
//auto只能用在函数内,即auto只能修饰局部变量。
   int mount;
   auto int month;
}

register 存储类

register存储类用于定义存储在寄存器中而不是RAM中的局部变量。这意味着变量的最大尺寸等于寄存器的大小通常是一个字,且不能对它应用一元的'&'运算符(因为它没有内存位置)。
register存储类定义存储在寄存器,所以变量的访问速度更快,但是它不能直接取地址,因为它不是存储在RAM中的。
一般情况下,变量存储在内存中,由于CPU对寄存器中的数据比对内存中的数据调用更快,所以对某些频繁调用的变量可以直接存储在寄存器中。
寄存器变量是局部变量,采用动态存储的方式进行寄存器的分配和释放,它的作用域和生命周期与自动变量auto相同。
一般形式:
{
  register int  miles;
}

static 存储类

static存储类指是编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用static修饰局部变量可以在函数调用之间保持局部变量的值。
static修饰符也可以应用于全局变量。当static修饰全局变量时,会使变量的作用域限制在声明它的文件内。
局部变量和全局变量都可以使用static修饰,用于指定存储类型为静态方式,变量所占的内存空间在静态存储区间分配。

#include <stdio.h>
void func1(void);
static int count=10;        /* 全局变量 - static 是默认的 */
int main(){
  while (count--) {
      func1();
  }
  return 0;
}
void func1(void){              
  static int thingy=5;
  thingy++;
  printf(" thingy 为 %d , count 为 %d\n", thingy, count);
}

extern 存储类

extern存储类用于定义在其他文件中声明的全局变量或函数。当使用extern关键字时,不会为变量分配存储空间,只是指示编译器该变量在其他文件中定义。
extern存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当使用 extern 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。

总结

 数据类型------房子的大小
变量与常量-----房子的名称
存储类-----------房子的使用权限以及使用期限
整段程序---------房子的使用者
静态变量(不能被其他源文件调用的全局变量)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

烟雨孤舟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值