首页 > 其他分享 >C语言自学笔记4----C语言存储类

C语言自学笔记4----C语言存储类

时间:2024-03-13 10:58:21浏览次数:20  
标签:count 存储 C语言 ---- static extern 自学 全局变量 hello

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 = 12; /
全局变量 - static 是默认的 /
int main()
{
while (count–) {
func1();
}
return 0;
}
void func1(void)
{
/
‘hello’ 是 ‘func1’ 的局部变量 - 只初始化一次
* 每次调用函数 ‘func1’ ‘hello’ 值不会被重置。
*/
static int hello = 4;
hello++;
printf(" hello 为 %d , count 为 %d\n", hello, count);
}
示例中 count 作为全局变量可以在函数内使用,hello 使用 static 修饰后,不会在每次调用时重置。
它会产生下列结果:

hello 为 5 , count 为 11
hello 为 6 , count 为 10
hello 为 7 , count 为 9
hello 为 8 , count 为 8
hello 为 9 , count 为 7
hello 为 10 , count 为 6
hello 为 11 , count 为 5
hello 为 12 , count 为 4
hello 为 13 , count 为 3
hello 为 14 , count 为 2
hello 为 15 , count 为 1
hello 为 16 , 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

标签:count,存储,C语言,----,static,extern,自学,全局变量,hello
From: https://blog.csdn.net/sunmaotaostm/article/details/136673850

相关文章

  • C#版开源免费的Bouncy Castle密码库
    思维导航前言项目介绍BouncyCastle介绍项目源代码创建控制台应用安装BouncyCastle包BouncyCastle使用示例项目源码地址优秀项目和框架精选DotNetGuide技术社区交流群前言今天大姚给大家分享一款C#版开源、免费的BouncyCastle密码库:BouncyCastle。项目介绍B......
  • Linux动态追踪——perf
    目录摘要 跟踪系统调用跟踪事件跟踪函数跟踪内核函数 跟踪用户函数性能分析perfstat与perftop 火焰图​编辑 总结摘要    ftrace 和perf都是Linux提供的动态追踪功能,两者有一定相似性,却又有不同的侧重点。ftrace更侧重于事件跟踪和内核行为......
  • 36_综合演示
    1.安装依赖包yum-config-manager--add-repohttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo2.配置docker源~]#yum-config-manager--add-repohttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#查看源是否配置上docker-ce.......
  • 35_安装mariadb
    1.安装mariadb#1.安装[root@mysql1~]yum-yinstallmariadb-server[root@mysql1~]#systemctlstartmariadb[root@mysql1~]#systemctlenablemariadbCreatedsymlink/etc/systemd/system/mysql.service→/usr/lib/systemd/system/mariadb.service.Createdsy......
  • 38_数据库实战
    一、数据库案例MySQL容器案例dockerrun-d-p3306:3306--privileged=true\-v/data/mysql/log:/var/log/mysql\-v/data/mysql/data:/var/lib/mysql\-v/data/mysql/conf:/etc/mysql/conf.d\-eMYSQL_ROOT_PASSWORD=123456\--namemysqlmysql:5.7#配置my.......
  • 37_常用命令
    常用命令启动常用命令启动docker:systemctlstartdocker停止docker:systemctlstopdocker重启docker:systemctlrestartdocker查看docker状态:systemctlstatusdocker开机启动:systemctle......
  • 41_Docker网络
    Docker网络常用命令dockerhelpnetworkconnectConnectacontainertoanetworkcreateCreateanetworkdisconnectDisconnectacontainerfromanetworkinspectDisplaydetailedinformationononeormorenetworksls......
  • 状态机
    在Java程序中实现一个状态机,你可以采用几种不同的设计模式。1.第一版状态机下面是一个简单的状态机实现,使用了枚举类型来表示状态,并且使用了状态模式(StatePattern)来实现状态之间的转换。publicenumProcessState{STARTED,IN_PROGRESS,FINISHED}接下来,定义......
  • 40_DockerFile简介
    Dockerfile简介常用保留字FROM基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是FROMMAINTAINER镜像维护者的姓名和邮箱地址RUN容器构建时需要运行的命令,有两种格式RUNyum-yinstallvimRUN[".......
  • docker-compose 部署gitlab
    主机ip:192.168.1.139[root@localhostgitlab_docker]#catdocker-compose.ymlversion:'3.1'services:gitlab:image:'gitlab/gitlab-ce:latest'container_name:gitlab#随着docker重启自动启动restart:alwaysenvironment:......