图片[1]yxqzC中的存储类yxqz小余塘

 

作者:余小小

日期:2021-10-02

存储类

  • 定义 C 程序中变量/函数的范围(可见性)和生命周期

  • 简单 的说,控制变量/函数的使用区域

  • 可以和java中的public product,default,private比较一下

可以使用的存储类型:

  • auto:是局部变量的默认存储类, 限定变量只能在函数内部使用;(变量默认的值)

  • register

  • static

  • extern

auto 存储类

  • auto 存储类是所有局部变量默认的存储类(自动的)

  • auto 只能用在函数内,即 auto 只能修饰局部变量。

{
  int mount;
  auto int month;
}

register 存储类

  • register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。

  • 这意味着变量的最大尺寸等于寄存器的大小(通常是一个字)

  • 且不能对register修饰的变量应用一元的 ‘&’ 运算符

  • 定义 ‘register’ 的变量并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,这取决于硬件和实现的限制

  • 寄存器只用于需要快速访问的变量,比如计数器。

{
  register int  miles;
}

static 存储类

  • static 存储类指示编译器在程序的生命周期内保持局部变量的存在

  • 不需要在每次它进入和离开作用域时进行创建和销毁

  • 使用 static 修饰局部变量可以在函数调用之间保持局部变量的值,就是可以不用return而修改变量的值

  • static 修饰符也可以应用于全局变量。会使变量的作用域限制在声明它的文件内(只有当前的这个c文件可以使用)

  • 全局声明的一个 static 变量或方法可以被任何函数或方法调用(只有当前的这个c文件可以使用)

  • 全局变量 – static 是默认的

#include <stdio.h>

/* 函数声明 */
void func1(void);

static int count=10;        /* 全局变量 - static 是默认的 */

int main()
{
 while (count--) {
     func1();
}
 return 0;
}

void func1()
{
/* 'thingy' 是 'func1' 的局部变量 - 只初始化一次
* 每次调用函数 'func1' 'thingy' 值不会被重置。
*/                
 static int thingy=5;
 thingy++;
 printf(" thingy 为 %d , count 为 %d\n", thingy, count);
}

extern 存储类

  • extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。(补充了static的文件作用域缺陷)

  • 当您使用 extern 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。(自动寻找相同的名字的变量,然后使用同一片空间)

  • extern 是用来在另一个文件中声明一个全局变量或函数。

第一个文件

#include <stdio.h>

int count ;
extern void write_extern();

int main()
{
  count = 5;
  write_extern();
}

第二个文件

#include <stdio.h>

extern int count;

void write_extern(void)
{
  printf("count is %d\n", count);
}

 

文章版权声明 1、本网站名称:小余塘
2、本站永久网址:https://www.yxqz.top/
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长QQ2457431511进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容