当前位置: 首页 > news >正文

C语言—再学习(数据的存储类别)

在c语言中,每个变量和函数都有两个属性:数据类型数据的存储类别

C的存储类别包括4种:自动挡(auto)、静态的(static)、寄存器的(register)、外部的(extern)。

一、自动变量(auto变量)                                                                                     

定义和使用:在函数内部定义的变量默认是 auto 存储类别,也可以显式地使用 auto 关键字来声明。

作用域和生存期:自动变量的作用域仅限于定义它的函数或代码块,当函数执行结束时,自动变量的生存期结束,其所占用的内存被释放也就是说,自动变量在函数调用时创建,函数返回时销毁。

二、静态局部变量(static局部变量)                                                                    

 局部静态变量:在函数内部使用 static 关键字声明的变量为局部静态变量。局部静态变量在程序运行期间只初始化一次,之后每次调用函数时,其值会保留上一次调用结束时的值

int func() {static int count = 0;  // 局部静态变量count++;return count;
}

全局静态变量:在函数外部使用 static 关键字声明的变量为全局静态变量。全局静态变量的作用域仅限于定义它的文件,其他文件无法访问该变量。其生存期同样从程序开始运行到程序结束。 

static int global_static_var = 10;  // 全局静态变量int main() {// 在此处可以使用global_static_varreturn 0;
}

注:静态存储要多占内存(长期不释放),而降低了程序的可读性,调用次数过多往往弄不清当前值,因此非必要,不要多用。

三、寄存器变量(register 变量)                                                                                

定义和使用:register 关键字用于建议编译器将变量存储在寄存器中,以提高访问速度。但编译器有最终决定权,不一定会将变量放入寄存器。

适用场景:通常适用于频繁使用的变量,如循环中的计数器等。但由于寄存器数量有限,且编译器会进行优化,实际应用中使用 register 关键字的情况相对较少。

四、外部存储类别(extern)                                                                                     

 声明外部变量:当一个变量在一个源文件中定义,而在另一个源文件中使用时,可以使用 extern 关键字来声明该变量。例如,在 file1.c 中定义了一个变量:

// file1.c
int global_var = 10;

在 file2.c 中使用该变量:

// file2.c
extern int global_var;  // 声明外部变量
int main() {// 可以在此处使用global_varreturn 0;
}

 声明外部函数:extern 也可以用于声明外部函数,当一个函数在一个源文件中定义,而在另一个源文件中调用时,可以使用 extern 声明函数,虽然在实际应用中,函数声明时 extern 关键字常常省略,但原理上是使用了 extern 来声明外部函数。

// file1.c
int add(int a, int b) {return a + b;
}// file2.c
extern int add(int a, int b);  // 声明外部函数
int main() {int result = add(3, 5);return 0;
}

相关文章:

  • 大模型——Crawl4AI为 LLM 和 RAG 准备高质量网页数据
  • electron 基础知识
  • 服务器租用与托管注意事项有哪些
  • 互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-4
  • Python Day 24 学习
  • 亚马逊云科技:开启数字化转型的无限可能
  • LeetCode 3335.字符串转换后的长度 I:I先递推
  • 标贝科技:大模型领域数据标注的重要性与标注类型分享
  • Linux——守护进程
  • 改变应用的安装目录
  • 浅谈 Redis 数据类型
  • pdf url 转 图片
  • CSV注入攻击技术解析
  • Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
  • 【认知思维】过度自信效应:高估自我能力的认知偏差
  • 【Pandas】pandas DataFrame cumprod
  • PostgreSQL 服务器信号函数
  • ZYNQ实战:可编程差分晶振Si570的配置与应用指南
  • 安卓刷机模式详解:Fastboot、Fastbootd、9008与MTK深刷
  • 项目:博客系统——基于SSM框架Mybatis-plus
  • 图讯丨习近平出席中国-拉美和加勒比国家共同体论坛第四届部长级会议开幕式
  • 特朗普开启第二任期首次外访:中东行主打做生意,不去以色列
  • 云南一男子持刀致邻居3死1重伤案二审开庭,未当庭宣判
  • 国际博物馆日中国主会场确定,北京将展“看·见殷商”等展览
  • 媒体和打拐志愿者暗访长沙一地下代孕实验室,警方已控制涉案人员
  • 全球前瞻|特朗普访问中东三国,印巴军方将于12日再次对话