C 语言零基础入门教程(六)

news/2025/3/20 15:04:13/

C 存储类

存储类定义 C 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C 程序中可用的存储类:
auto
register
static
extern

auto 存储类

auto 存储类是所有局部变量默认的存储类。

{int mount;auto int month;
}

上面的实例定义了两个带有相同存储类的变量,auto 只能用在函数内,即 auto 只能修饰局部变量。

register 存储类

register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个字),且不能对它应用一元的 ‘&’ 运算符(因为它没有内存位置)。

{register int  miles;
}

寄存器只用于需要快速访问的变量,比如计数器。还应注意的是,定义 ‘register’ 并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,这取决于硬件和实现的限制。

static 存储类

static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 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)
{
/* 'thingy' 是 'func1' 的局部变量 - 只初始化一次* 每次调用函数 'func1' 'thingy' 值不会被重置。*/                static int thingy=5;thingy++;printf(" thingy 为 %d , count 为 %d\n", thingy, count);
}

实例中 count 作为全局变量可以在函数内使用,thingy 使用 static 修饰后,不会在每次调用时重置。

可能您现在还无法理解这个实例,因为我已经使用了函数和全局变量,这两个概念目前为止还没进行讲解。即使您现在不能完全理解,也没有关系,后续的章节我们会详细讲解。当上面的代码被编译和执行时,它会产生下列结果:

 thingy 为 6 , count 为 9thingy 为 7 , count 为 8thingy 为 8 , count 为 7thingy 为 9 , count 为 6thingy 为 10 , count 为 5thingy 为 11 , count 为 4thingy 为 12 , count 为 3thingy 为 13 , count 为 2thingy 为 14 , count 为 1thingy 为 15 , count 为 0

extern 存储类

extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 extern 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。

当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。

extern 修饰符通常用于当有两个或多个文件共享相同的全局变量或函数的时候,如下所示:

第一个文件:main.c

实例

#include <stdio.h>int count ;
extern void write_extern();int main()
{count = 5;write_extern();
}

第二个文件:support.c

实例

#include <stdio.h>extern int count;void write_extern(void)
{printf("count is %d\n", count);
}

在这里,第二个文件中的 extern 关键字用于声明已经在第一个文件 main.c 中定义的 count。现在 ,编译这两个文件,如下所示:

 $ gcc main.c support.c

这会产生 a.out 可执行程序,当程序被执行时,它会产生下列结果:

count is 5

http://www.ppmy.cn/news/195681.html

相关文章

魅蓝NOTE6怎么ROOT,一招最简单实用的方法

魅蓝note6如何完全ROOT?很多魅蓝NOTE6用户都想ROOT自己的手机&#xff0c;但是通过使用KINGROOT,ROOT大师&#xff0c;ROOT精灵之类的ROOT软件&#xff0c;发现并没有效果。以为魅蓝note6 不能root了&#xff0c;其实魅蓝NOte6可以获取完美root&#xff0c; 下面说说教程步骤 …

魅蓝metal刷android 6,魅族魅蓝Metal刷机包 Flyme 6.0.2.0Y公开稳定版 Flyme 6稳定版系统发布 全新体验...

rom更新记录 功能调整 每个功能从创造到落地都花费了巨大心血,只为给魅友带来更多惊喜。由于新功能在各个机型上的适配会存在一定时间差,未找到新功能的魅友请耐心等候。 系统 全面提升系统稳定性,同时优化了待机功耗,让使用更顺心 提高第三方应用的兼容性,避免因闪退影…

note6怎么关root,魅蓝note6怎么恢复出厂设置

在哪关掉root&#xff1f;魅蓝note6 第一种方法也是比较简单的&#xff0c;就是等魅族手机下次更新的时候&#xff0c;更新一下&#xff0c;root权限就没有了。 第二种方法就是去魅族官网&#xff0c;如图打开flyme界面。 点击上方的下载。 选择对应的手机型号&#xff0c;下载…

魅族 刷机android 6.0,魅族mx6 flyme6

魅族mx6 flyme6下载&#xff01;魅族mx6 flyme6刷机包是魅族Mx6 Flyme 6刷机包&#xff01;让给为没有申请到flyme6内资资格的用户&#xff0c;也能率先体验全新的flyme系统&#xff0c;话不多话&#xff0c;赶快入手吧&#xff01; 魅族MX6 Flyme6.0公测包固件使用方法&#x…

北京新机场 严打无人机“黑飞”

来源:北京青年报 根据大兴机场发布的公告显示&#xff0c;在2019年1月22日至3月15日每天8时至20时&#xff0c;京台高速以西&#xff0c;106国道以东&#xff0c;永定河左堤以北&#xff0c;大礼路以南的闭合区域内&#xff0c;禁止焚烧产生大量烟雾的农作物秸秆、垃圾等物质&…

发现一款APP可以看到哪些区域是禁飞区,还可以申报飞行,这样方便自己选地方test自己的无人机了。

发现一款APP可以看到哪些区域是禁飞区&#xff0c;还可以申报飞行&#xff0c;这样方便自己选地方test自己的无人机了。 不知在可以飞的区域是否也要申请计划&#xff1f; 这里也可以看到整个郫都区都确实是禁飞区&#xff0c;别人不让飞也有道理。

今奥无人机举证_无人机助力国土 “三调”外业举证

“首先观察图斑有没有多个地类&#xff0c;然后照片要按规范拍照&#xff0c;做到一次举证到位。”近日&#xff0c;安昌街道九鼎村上空&#xff0c;一架无人机正在空中盘旋拍摄照片&#xff0c;原来这是安昌街道自然资源所工作人员借助新型设备开展第三次全国国土调查外业图斑…

无人机航线规划

非最短非最长&#xff0c;因为只有10个点&#xff0c;直接搜 标题&#xff1a;无人机航线规划 某海岛遭遇飓风灾害&#xff0c;道路设施受损严重。救援部门为尽快探明主要交通干道的受损情况&#xff0c;在地图上划定了主要交通干道的侦察点&#xff0c; (如图a所示)&#xf…