揭秘c语言储存类别

2024-06-06 17:12
文章标签 语言 类别 揭秘 储存

本文主要是介绍揭秘c语言储存类别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

欢迎来到我的博客

个人主页:北岭敲键盘的荒漠猫-CSDN博客

 本文将整理c语言的储存类型的知识点

储存类型概念

描述:用于解决内存开辟与解放的时间的问题。跟作用域没啥关系。

但是呢,他也是能影响到程序的运行的,所以是很关键的。

类型:

auto :自动变量,默认的类型

static: 静态变量

extern: 拓展变量

auto变量

描述:默认变量,我们不定义的话他默认是这个。这个的内存开辟为,执行这个定义变量语句的时候就会开辟内存空间,当我们执行完这个变量所在的定义域的时候就会解除他所占用的空间。

因为我们之前一直都是用这个默认的变量,所以我就不多废话了。

static静态变量

官方理解:这个变量从执行后就会一直存在,他的内存直到程序结束的时候才会释放。

方便的理解:比如在函数中,定义后他就一直存在,下次调用函数不再定义他,而是使用上次定义的这个变量进行操作。

他的作用分为两种:

局部变量

全局变量

全局变量

提前预知:我们一个c文件中的函数或者变量,是可以引入到其他的c文件中使用的。

static定义全局变量的效果:没错,就是禁止这个全局变量能够被拿到其他的文件中使用,让他只能在本文件中使用。

局部变量

描述:在局部变量中,我们用startic定义变量,倒是可以直接把这个静态变量所在的函数引用的其他的文件中。但是在局部变量中,这个startic变量是从执行他开始就存在,一直存在到程序结束。中途要是重复调用函数,再到他赋值的这行代码,就会直接跳过。

案例演示:

#include <stdio.h>int fun()
{static int a = 1;a++;printf("%d", a);
}int main()
{int b;for (b = 0; b < 5; b++) // 循环执行函数三次fun();
}

结果如下:

你看,按理来说每次执行函数都应该执行一个a=1,重置a,但是我们加上了startic之后,他就会跳过,不会再重新赋值了。

注意点:如果是定义了startic变量,而且没给他赋初始值的话,他就自己默认为0.

#include <stdio.h>int fun()
{static int a;printf("%d", a);
}int main()
{fun();
}

extern变量

extern有两个作用,

第一个是声明主函数下面的变量,让主函数能够使用下方变量。

第二个是从其他文件中找到这个变量,来引入到这个文件中。

从exper1中获取a变量,然后再exper中使用。

他与include的差距就是,他是引入一个变量,include引入整个文件。

这篇关于揭秘c语言储存类别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1036726

相关文章

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

揭秘世界上那些同时横跨两大洲的国家

我们在《世界人口过亿的一级行政区分布》盘点全球是那些人口过亿的一级行政区。 现在我们介绍五个横跨两州的国家,并整理七大洲和这些国家的KML矢量数据分析分享给大家,如果你需要这些数据,请在文末查看领取方式。 世界上横跨两大洲的国家 地球被分为七个大洲分别是亚洲、欧洲、北美洲、南美洲、非洲、大洋洲和南极洲。 七大洲示意图 其中,南极洲是无人居住的大陆,而其他六个大洲则孕育了众多国家和

三国地理揭秘:为何北伐之路如此艰难,为何诸葛亮无法攻克陇右小城?

俗话说:天时不如地利,不是随便说说,诸葛亮六出祁山,连关中陇右的几座小城都攻不下来,行军山高路险,无法携带和建造攻城器械,是最难的,所以在汉中,无论从哪一方进攻,防守方都是一夫当关,万夫莫开;再加上千里运粮,根本不需要打,司马懿只需要坚守城池拼消耗就能不战而屈人之兵。 另一边,洛阳的虎牢关,一旦突破,洛阳就无险可守,这样的进军路线,才是顺势而为的用兵之道。 读历史的时候我们常常看到某一方势

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验