存储方式

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

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

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

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

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

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

动态存储区中存放数据

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

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

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

存储类别

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

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

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

局部变量的存储类别

动态局部变量(auto)

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

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

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

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

静态局部变量(static)

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

注意

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

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

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

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

c语言形参的隐含存储类型,C存储类型相关推荐

  1. C语言char类型的存储

    目录 char是如何存储的 char的类型 char的取值范围 例题 char是如何存储的 字符型(char)用于储存字符(character),如英文字母或标点.但是char类型在内存中并不是以字符 ...

  2. c语言作用域有哪两种变量,2017年计算机二级C语言字考点归纳:变量的存储类别、作用域及生存期...

    7.7 变量的存储类别.作用域及生存期 1.变量的存储类别 在C语言中,有两类存储类别:自动类别及静态类别. 有4个与两种存储类别有关的说明符:auto(自动).register(寄存器).stati ...

  3. 黑马程序员C语言基础(第八天)复合类型(自定义类型)(结构体)、共用体(联合体)、枚举enum、 typedef

    黑马程序员C语言基础(第一天) 黑马程序员C语言基础(第二天) 黑马程序员C语言基础(第三天) 黑马程序员C语言基础(第四天)数据类型 黑马程序员C语言基础(第五天)运算符与表达式.程序流程结构.数组 ...

  4. C语言中局部变量和全局变量 变量的存储类别

    C语言中局部变量和全局变量 变量的存储类别(static,extern,auto,register)   局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用 ...

  5. C语言形参跟实参详解

    形参与实参 今天我们来说下c语言形参与实参的区别,形参跟实参理解的话也很简单,但是好多同学关于这个知识点都是一知半解,没有真正的去透彻,一问都知道,但在真正引用的时候还会出现很多问题,而百度的时候又会 ...

  6. C/C++ 存储类型 作用域 连接类型

    1)存储类型:   标准C语言为变量,常量和函数定义了4种存储类型:extern,auto,static,register. 这4种存储类型可分为两种生存期限:永久的(在整个程序执行期都存在)和临时的 ...

  7. C语言数据类型——基本类型,构造类型,枚举类型,指针类型

    目录 一.基本类型 1.1.整型int 1.2.实型(浮点型) 1.3.字符型char 二.构造类型 2.1.数组类型[] 2.1.1.字符数组 2.1.2.一维数组 2.1.3.二维数组 2.1.4 ...

  8. C语言从0到1·数据类型及其存储

    你能学到什么 数据类型有哪些 整型 字符类型 浮点型(实型) 数据类型有哪些 整型:存储整数(如:int) 浮点型/实型:存储浮点数(如:double) 字符型:存放字符(如:char) 字符串型:C ...

  9. C语言—静态存储与动态存储

    静态存储和动态存储 变量从变量值存在的时间(即生存期)角度分:静态存储方式和动态存储方式 静态:在编译时确定了固定的内存地址与内存大小,如:函数里的局部变量.全局变量等 动态:由程序控制,运行时主动性 ...

最新文章

  1. 用 Go 语言理解 Tensorflow
  2. 阿里 双11 同款,流量防卫兵 Sentinel go 源码解读
  3. java反射机制详解_Java反射机制详解
  4. java笔试面试经典问题
  5. “3D几何与视觉技术”全球在线研讨会第二期
  6. Spark shuffle:hash和sort性能对比
  7. SQL Server 获取日期是星期周几(默认从周日开始到周六 1-7)
  8. 综合布线系统入门及应用(一)
  9. java高级教程pdf_Java高级特性编程及实战 PDF 下载
  10. 别再用 offset 和 limit 分页了,性能太差!
  11. 2021年合肥工业大学《高等代数》试题和答案(蔡宇编辑)
  12. 【微信小程序入门到精通】— AppID和个性配置你学会了么?
  13. 致80后的北漂IT人:未来在哪儿?
  14. Android开发必备知识
  15. iOS 17 开放侧载,微信双开要来了?
  16. PHP微信扫码关注公众号并授权登录源码
  17. RK3288_Android_8.1_定频关机
  18. python做外贸_跟着销售学python(3)---开发微信公平台(1)
  19. 核心能力:产品认知能力
  20. 接口的多实现和多继承

热门文章

  1. Leetcode 415. 字符串相加 (每日一题 20210826 同类型题)
  2. 条件随机场(conditional random fields) 及代码实现
  3. ModelCheckpoint 讲解【TensorFlow2入门手册】
  4. Python入门100题 | 第014题
  5. pandas中loc、iloc与ix的用法比较
  6. Python编程基础:第二十九节 异常Exception
  7. 不想参加无聊的团队分享, 我们这样玩
  8. 热点推荐:秒杀系统架构分析与实战--转载
  9. spring源码分析之spring-web http详解
  10. The Illustrated Transformer:中英文(看原文,很多翻译是错误的)