C 存储类

C 语言中的存储类指的是控制变量存储方式和生命周期的关键字。局部变量、全局变量和静态变量等都可以使用存储类关键字进行控制,以达到更加灵活的变量存储方式和更加符合实际需要的生命周期等效果。通常使用的存储类关键字有 auto、register、static、extern 四种。

下面我们来详细介绍一下“C 存储类”的使用攻略。

auto 存储类

auto 存储类是默认的存储类,它将变量存储在栈中,因此它的作用域局限于它所在的块中。一般情况下,我们不需要显式地使用 auto 关键字。

//局部变量默认为 auto 存储类
int main()
{
    auto int i = 10;
    printf("%d\n", i);
    return 0;
}

register 存储类

register 存储类用于声明存储在寄存器中的局部变量。访问寄存器的变量速度更快,因此这种存储方式可用于加快对变量的访问。但是,由于 CPU 寄存器数量有限,因此不能过度使用 register 存储类。

register int i = 10;
printf("%d\n", i);

static 存储类

static 存储类用于在函数调用之间保持局部变量的值。同时,static 还可以用于隐藏函数和全局变量。静态变量的作用域仅限于当前源文件,可以通过外部声明使其成为多个源文件共享的全局变量。

#include <stdio.h>

void fun()
{
    // num1为静态局部变量,每次调用后其值不会重置
    static int num1 = 1; 
    int num2 = 1; // num2为非静态局部变量,每次调用后其值都会重置

    // 静态局部变量和非静态局部变量的值
    printf("num1=%d, num2=%d\n", num1++, num2++);
}

int main()
{
    fun();
    fun();
    fun();
    return 0;
}

extern 存储类

在多个源文件中使用同一个全局变量时,可以使用 extern 关键字。extern 声明在一个源文件中引用一个在另一个源文件中定义的全局变量。在使用 extern 来引用变量时,不能初始化变量,因为在使用 extern 时变量已经被初始化。

//File1.c
#include <stdio.h>

// 全局变量num1
int num1 = 10; 

void fun()
{
    // 输出全局变量num1
    printf("%d\n", num1);
}

//File2.c
extern int num1;   // 告诉编译器这个 num1 变量在其他文件里

void fun()
{
    // 外部引用全局变量num1
    printf("%d\n", num1);
}

以上就是关于“C 存储类”的使用攻略,希望能对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C 存储类 - Python技术站

(0)
上一篇 2023年5月10日
下一篇 2023年5月10日

相关文章

  • C 程序 十进制转换为二进制

    下面是关于如何将C程序的十进制转换为二进制的完整使用攻略,具体内容如下: 目标 本文将介绍如何将十进制转换为二进制,并提供两个示例来演示转换过程。 步骤 根据十进制数除以 2 的规则,得到商和余数。余数只能是 0 或 1,商则继续除以2直到商为0。 从下往上写出余数,得到二进制结果。 示例1 问题 请将 10 转换为二进制。 解决方案 将 10 除以 2,得…

    C 2023年5月9日
    00
  • C/C++ 中extern关键字详解

    C/C++ 中extern关键字详解 在 C/C++ 中,extern 是一个很常见的关键字,常用于声明全局变量或函数。本文将对 extern 关键字进行详细讲解。 1. 变量声明 当在多个源文件中引用同一全局变量时,需要在其中一个源文件中定义该全局变量,然后在其它源文件中使用 extern 关键字声明该变量。这样确保了在多文件编译时,每个文件都将引用同一变…

    C 2023年5月23日
    00
  • Java日常练习题,每天进步一点点(47)

    首先对于题目“Java日常练习题,每天进步一点点(47)”,实际上这是一道Java语言练习题目的系列。根据具体的题目内容,需要我们运用Java语言的各种知识和技能进行解答。 这道题目的具体细节我不清楚,但我可以提供一些通用的解题思路和攻略: 仔细阅读题目要求,理解题目要求并思考解题思路; 如果不确定自己的思路是否正确,可以手动进行编写或者借助IDE进行运行调…

    C 2023年5月23日
    00
  • Java日常练习题,每天进步一点点(61)

    下面是对Java日常练习题的完整攻略。 标题 题目命名规则:题目序号-题目名称 例如:61-代码中的注释 描述 放置题目的具体描述,包括题目的背景、要求和提示等信息。 示例说明 以案例的形式,分别举例解决方案的具体实现和结果。 示例一 题目:将列表排序并输出 描述:给定一个字符串类型的数组,将该数组按字典排序后输出。 示例输入: String[] arr =…

    C 2023年5月23日
    00
  • Python机器学习之AdaBoost算法

    Python机器学习之AdaBoost算法 简介 AdaBoost(Adaptive Boosting)是一个非常流行的机器学习算法,它能够提高弱分类算法的准确性。其中,“自适应”指的是每个分类器的权重会随着准确率的变化而动态调整,而“增量”则表示每个分类器都是基于之前分类器的结果进行训练的。 原理 AdaBoost的基本算法如下: 初始化数据集权重 $w_…

    C 2023年5月23日
    00
  • php计算两个坐标(经度,纬度)之间距离的方法

    计算两个坐标(经度,纬度)之间的距离是地图应用中常用的功能。下面是计算两个坐标距离的方法,示例中使用的是PHP语言。 使用 Haversine 公式计算两个坐标之间的距离 Haversine公式是常用的计算两个坐标之间距离的公式。下面是使用Haversine公式计算两个坐标之间距离的PHP代码: function distance($lat1, $lon1,…

    C 2023年5月22日
    00
  • 基于C语言实现五子棋游戏完整实例代码

    基于C语言实现五子棋游戏完整实例代码攻略 1. 程序概述 五子棋,一种传统的策略性棋类游戏。本文主要介绍使用C语言编写五子棋游戏的实例代码过程。该代码使用了控制台界面实现,基于Windows操作系统。 2. 程序实现 (1)游戏逻辑实现 游戏逻辑设计了游戏的核心模块,包括棋盘的绘制、游戏过程的实时响应、胜负判断等等。游戏逻辑由主函数以及多个子函数组成。 (2…

    C 2023年5月23日
    00
  • 电脑蓝屏DMP文件在哪? win10dmp蓝屏文件的打开方法

    电脑蓝屏DMP文件在哪? win10dmp蓝屏文件的打开方法 当我们的电脑系统遭遇蓝屏时,电脑会自动生成一个.DMP文件,该文件内含有电脑蓝屏时相关的信息和错误代码。在解决蓝屏问题时,查看.DMP文件可以帮助我们更快地找到问题所在。本文将讲解.DMP文件的查找以及如何打开.DMP文件。 查找.DMP文件位置 打开文件资源管理器,点击“电脑”(或者“此电脑”,…

    C 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部