C语言包中形参的隐含存储类别

存储方式

变量的作用域(空间)可分为全局变量和局部变量,变量的存储方式可分为动态存储方式和静态存储方式。

从变量值存在的时间(生存期)来观察,有的变量在程序运行的整个过程都是存在的,有的变量则是在调用其所在的函数时才临时分配存储单元。也就是说,变量的存储有两种不同方式:静态存储方式和动态存储方式。

静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式

动态存储方式是在程序运行期间根据需要进行动态的分配存储空间的方式

在内存中供用户使用的存储空间(用户区)可分为三种:程序区、静态存储区、动态存储区

数据分别存放在静态存储区和动态存储区中,全局变量存放在静态存储区中,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放。在程序执行过程中,数据占据固定的存储单元,而非动态地进行分配和释放。

动态存储区中存放数据

函数形式参数,在调用函数时给形参分配存储空间。

函数中未定义的没有用关键字static声明的变量,即自动变量。

函数调用时的现场保护和返回地址等

存储类别

C语言中,每个变量额函数都有两个属性:数据类型和数据的存储类型,存储类型指的是数据在内存中存储的方式,即静态存储和动态存储。

在定义和声明变量或函数时,应同时指定其数据类型和存储类别,也可采用默认方式指定。

C的存储类别包括4种:自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。根据变量的存储类别,可知道变量的作用域和生存期。

局部变量的存储类别

动态局部变量(auto)

函数中的局部变量,若未声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。

函数的形参和在函数中定义的局部变量,都属于此类。在调用函数时,系统会给这些变量分配存储空间,在函数调用结束时,会自动释放掉这些空间。因此这类局部变量称为自动变量。

自动变量用auto做存储类别的声明。

实际上,关键字auto可省略,不写auto则隐含指定为自动存储类别,它属于动态存储方式。程序中大多数变量属于自动变量。

静态局部变量(static)

若希望函数的局部变量的值在函数调用结束后不消失而继续保留原值,即占用的存储单元不释放,在下次再调用该函数时,该变量已有值。此时应指定该局部变量为“静态局部变量”,使用关键字static进行声明。

注意

静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放。而自动变量(动态局部变量)属于动态存储类别,分配在动态存储区空间而非静态存储区空间,函数调用结束后即释放。

对静态局部变量是在编译时赋初值,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值,而只是保留上次函数调用结束时的值。而对自动变量赋初值,不是在编译时进行的,而是在函数调用时进行的,每调用一次函数重新给一次初值,相当于执行一次赋值语句。

若在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符('\0‘对字符变量)。而对自动变量而言,其值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新分配单元,而所分配的单元中的内容是不可知的。

虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的。因为它是局部变量,只能被本函数引用,而不能被其他函数引用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/623817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot+mysql大学生就业推荐系统-计算机毕业设计源码01535

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对学生就业管理等问题,对学生就业…

扒开MySQL的源码,探索MVCC实现方式

下载MySQL源码 没有什么比源码更靠谱的了,所以我们先把源码下载下来,后期验证使用MySQL源码下载 MVCC是什么 mvvc全称是multi-version concurrency control(多版本并发控制),主要用于处理读写并发冲突的问题。 MVC…

电子学会2023年12月青少年软件编程(图形化)等级考试试卷(二级)真题,含答案解析

青少年软件编程(图形化)等级考试试卷(二级) 分数:100 题数:37 一、单选题(共25题,共50分) 1. 在制作推箱子游戏时,地图是用数字形式储存在电脑里的,下图是一个推箱子地图,地图表示如下: 第一行(111111) 第二行(132231) 第三行(126621) 第四行( ) 第…

大数据开发之Hive(企业级调优)

第 10 章:企业级调优 创建测试用例 1、建大表、小表和JOIN后表的语句 // 创建大表 create table bigtable(id bigint, t bigint, uid string, keyword string, url_rank int, click_num int, click_url string) row format delimited fields terminated by \t; //…

Asp .Net Core 系列:基于 Swashbuckle.AspNetCore 包 集成 Swagger

什么是 Swagger? Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。它提供了一种规范的方式来定义、构建和文档化 RESTful Web 服务,使客户端能够发现和理解各种服务的功能。Swagger 的目标是使部署管理和使用功…

Halcon滤波器 laplace 算子

Halcon滤波器 laplace 算子 使用laplace 算子对图像进行二次求导,会在边缘产生零点,因此该算子常常与zero_crossing算子配合使用。求出这些零点,也就得到了图像的边缘。同时,由于laplace算子对孤立像素的响应要比对边缘或线的响应…

【SpringBoot系列】JDK动态代理

🤵‍♂️ 个人主页:@香菜的个人主页,加 ischongxin ,备注csdn ✍🏻作者简介:csdn 认证博客专家,游戏开发领域优质创作者,华为云享专家,2021年度华为云年度十佳博主 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收…

kafka除了作为消息队列还能做什么?

Kafka 最初是为大规模处理日志而构建的。它可以保留消息直到过期,并让各个消费者按照自己的节奏提取消息。 与其之前的竞品不同,Kafka 不仅仅是一个消息队列,它还是一个适用于各种情况的开源事件流平台。 让我们回顾一下流行的 Kafka 用例。 …

C语言经典算法之冒泡排序算法

目录 前言 建议: 简介: 一、代码实现 二、时空复杂度 时间复杂度: 空间复杂度: 总结: 前言 建议: 1.学习算法最重要的是理解算法的每一步,而不是记住算法。 2.建议读者学习算法的时候…

CNN:Convolutional Neural Network(下)

目录 1 CNN 学到的是什么 1.1 Convolution 中的参数 1.2 FFN 中的参数 1.3 Output 2 Deep Dream 3 Deep Style 4 More Application 4.1 AlphaGo 4.2 Speech 4.3 Text 原视频:李宏毅 2020:Convolutional Neural Network 本博客属于学…

计算机毕业设计----SSH实现简单在线听音乐收藏管理系统

项目介绍 项目分为管理员与普通用户两种角色, 管理员角色包含以下功能: 管理员登录,用户管理,歌曲管理等功能。 用户角色包含以下功能: 按分类查看,添加歌单,用户登录等功能。 环境需要 1.运行环境:最好是java jdk 1.8&…

shell从入门到精通

系列文章目录 shell从入门到精通 shell从入门到精通 系列文章目录一、diff 用法 (一般作补丁,用补丁的方式更新脚本)1.1参数a添加1.2 参数c更改1.3参数d删除1.4参数a和d的对比1.5参数b(忽略空格)1.6 参数B(忽略空行&a…

打造创新的金融数据平台,加速数字化和智能化转型丨PingCAP 官网金融行业专区上线

自诞生以来,TiDB 的原生分布式架构在强一致性、高可用性和可扩展性等方面与金融级业务需求高度契合,早期版本即为包括北京银行在内的金融用户提供服务。 TiDB 的核心能力始终源自与中国金融用户的共同创造。作为金融级分布式数据库,TiDB 在国…

【pytorch】使用pytorch构建线性回归模型-了解计算图和自动梯度

使用pytorch构建线性回归模型 线性方程的一般形式 衡量线性损失的一般形式-均方误差 pytorch中计算图的作用和优势 在 PyTorch 中,计算图(Computational Graph)是一种用于表示神经网络运算的数据结构。每个节点代表一个操作,例如…

药物“出气”可知|ZL-005大小鼠雾化给药仪

雾化吸入给药是一种通过装置使药物进入肺部局部或全身发挥作用的给药方式。相较于口服药剂,雾化吸入给药可避免首过效应和药剂破坏,提高药物生物利用度。 而ZL-005大小鼠雾化给药仪,则是新一代小动物雾化装置的理想选择,可完成动…

JavaWeb之Redis

31、Redis 31.1、Redis概述 概念:redis是一款高性能的NOSQL系列的非关系性数据库 什么是NOSQL NoSQL(NoSQL Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。 随着互联网web2.0网站的兴起&a…

MIT_线性代数笔记:第 26 讲 复矩阵;快速傅里叶变换

目录 复向量 Complex vectors复矩阵 Complex matrices傅里叶变换 Fourier transform快速傅里叶变换 Fast Fourier transform 实矩阵也可能有复特征值,因此无法避免在矩阵运算中碰到复数,本讲学习处理复数矩阵和复向量。 最重要的复矩阵是傅里叶矩阵&…

电力能源监测管理系统,在医院中有哪些作用?

随着经济全球化的发展,节能减排成为当前社会发展必须关注的问题。电力能源监测管理系统,可以分析电力管理能源的现状,并根据现状提出对应的策略,为快速高效建成绿色智能化医院提供有力支撑和技术保障。 医院能源管理现状 1、人力…

Java零基础教学文档第四篇:HTML_CSS_JavaScript(2)

【HTML】 【主要内容】WEB: 1.Web前端简介 2.创建第一个前端项目 3.相关标签详解 4.表格标签详解 5.表单标签详解 6.框架和实体字符 【学习目标】 1. Web前端简介 1.1 为什么要学习Web前端&#…

Mask R-CNN网络中ROI Align层中的Align单词是什么意思。

问题描述: Mask R-CNN网络中ROI Align层中的Align单词是什么意思。 问题解答: 在 Mask R-CNN 网络中,ROI Align 层中的 "Align" 这个单词表示对齐(Align)。在这里,"Align" 的意思是…