0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言变量的存储类别有哪些详细资料介绍

Wildesbeast 来源:今日头条 作者:算法集市 2020-02-20 16:17 次阅读

C语言中的变量根据其生存周期,可以分为静态存储方式和动态存储方式。

静态存储方式:是指在程序运行期间分配固定的存储空间的方式。静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量。

动态存储方式:是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储区中存放的变量是根据程序运行的需要而建立和释放的,通常包括:自动变量;函数形参;函数调用时的现场保护和返回地址等。

静态分配和动态分配的区别主要是两个:

时间不同:静态分配发生在程序编译和连接的时候,动态分配则发生在程序调入和执行的时候。

空间不同:堆都是动态分配的,没有静态分配的堆。动态分配由函数malloc进行分配(需要注意的是有一个malloc,就有一个free对应)。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。不过栈的动态分配和堆不同,它的动态分配是由编译器进行释放,无需人工实现。

C语言的内存分配方式:堆和栈

变量示例

C语言中的变量具体包含有四种:自动的(auto),静态的(static),寄存器的(register),外部的(extern),如果不加以声明,则认为是auto型,自动分配存储空间,属于动态存储方式。

Static声明局部变量是在函数调用结束后不消失而保留原值,即占用存储单元不释放,在下一次调用该函数时,该变量保持上次函数调用结束时的值。Static在对全局变量声明中,该变量的作用域则仅限于本文件模块操作。

Register变量是C语言中允许将局部变量的值放在CPU中的寄存器中需要时直接从寄存器中取出来参加运算,不必再到内存中提取,但是计算机系统中寄存器数量有限,不能任意定义任意多的存储器,局部静态变量不能定义为寄存器变量。

寄存器是最贴近CPU的,而且CPU只在寄存器中进行存取。寄存的意思是暂时存放数据,不用每次都从内存中取,它是一个临时的存放数据的空间。

关于寄存器变量有以下事项需要注意:

为寄存器变量分配寄存器是动态完成的,因此,只有局部变量和形式参数才能定义为寄存器变量。

寄存器的长度一般和机器的字长一致,所以,只有较短的类型如int、char、short等才适合定义为寄存器变量,诸如double等较大的类型,不推荐将其定义为寄存器类型。

CPU的寄存器数目有限,因此,即使定义了寄存器变量,编译器可能并不真正为其分配寄存器,而是将其当做普通的auto变量来对待,为其分配栈内存。当然,有些优秀的编译器,能自动识别使用频繁的变量,如循环控制变量等,在有可用的寄存器时,即使没有使用 register 关键字,也自动为其分配寄存器,无须由程序员来指定。

计算机系统的硬件组织:总线、IO、主存、CPU

Extern声明外部变量,表示变量在别的文件中。在一个文件中,如果定义之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量做外部变量声明。在多文件中,也可以采用extern声明的办法进行外部变量声明。有时希望某些局部变量只限于被本文件引用,而不能被其他文件引用,这时就可以采用在定义外部变量时外加一个static,这在程序模块化设计中加强了通用性。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7534

    浏览量

    128852
  • 函数
    +关注

    关注

    3

    文章

    3904

    浏览量

    61311
  • 变量
    +关注

    关注

    0

    文章

    596

    浏览量

    28112
收藏 人收藏

    评论

    相关推荐

    c语言变量的作用域和存储类别

    c语言变量的作用域和存储类别简述,很不错哦。
    发表于 07-14 17:12 0次下载

    C++语言入门教程之C++语言程序设计函数的详细资料概述免费下载

    本文档的主要内容详细介绍的是C++语言入门教程之C++语言程序设计函数的详细资料概述免费下载内容包括了:1 函数的定义和使用2 函数的参数传
    发表于 09-20 14:51 23次下载

    C语言入门教程之字符数据的详细资料讲解

    本文档的主要内容详细介绍的是C语言入门教程之字符数据的详细资料讲解主要内容包括了:1 字符型常量2 字符变量3 字符的输入和输出4 程序举例
    发表于 10-23 17:53 7次下载

    C语言入门教程之堆栈的详细资料概述

    本文档的主要内容详细介绍的是C语言入门教程之堆栈的详细资料概述。
    发表于 11-29 11:47 11次下载

    C语言程序设计教程之C语言基础的详细资料概述

    本文档的主要内容详细介绍的是C语言程序设计教程之C语言基础的详细资料概述
    发表于 12-10 17:16 65次下载
    C<b class='flag-5'>语言</b>程序设计教程之C<b class='flag-5'>语言</b>基础的<b class='flag-5'>详细资料</b>概述

    问题cube8的C语言程序的详细资料免费下载

    本文档的主要内容详细介绍的是问题cube8的C语言程序的详细资料免费下载。
    发表于 12-26 15:44 2次下载

    C语言教程之Makefile基础的详细资料说明

    本文档的主要内容详细介绍的是C语言教程之Makefile基础的详细资料说明。
    发表于 01-23 11:05 10次下载
    C<b class='flag-5'>语言</b>教程之Makefile基础的<b class='flag-5'>详细资料</b>说明

    C语言标准教程之C语言基础知识的详细资料说明

    本文档的详细介绍的是C语言标准教程之C语言基础知识的详细资料说明主要内容包括了:1.电脑内存的运行方式, 2.认识和使用标识符 ,3.
    发表于 02-15 11:26 6次下载
    C<b class='flag-5'>语言</b>标准教程之C<b class='flag-5'>语言</b>基础知识的<b class='flag-5'>详细资料</b>说明

    C语言教程之指针的详细资料说明

    本文档的主要内容详细介绍的是C语言教程之指针的详细资料说明 学习目标1.指针与指针变量2.指针的声明与使用,3.指针与数组间的关系,4.动态
    发表于 02-21 11:11 9次下载
    C<b class='flag-5'>语言</b>教程之指针的<b class='flag-5'>详细资料</b>说明

    PHP八种变量类型的详细资料说明

    本文档的主要内容详细介绍的是PHP八种变量类型的详细资料说明免费下载。
    发表于 03-01 17:20 7次下载
    PHP八种<b class='flag-5'>变量</b>类型的<b class='flag-5'>详细资料</b>说明

    数据库实战教程之一般变量与替代变量详细资料说明

    本文档的主要内容详细介绍的是数据库实战教程之一般变量与替代变量详细资料说明。
    发表于 03-07 15:16 13次下载
    数据库实战教程之一般<b class='flag-5'>变量</b>与替代<b class='flag-5'>变量</b>的<b class='flag-5'>详细资料</b>说明

    如何使用C语言实现软复位详细资料说明

    本文档的有内容详细介绍的是如何使用C语言实现软复位详细资料说明。
    发表于 06-14 17:44 1次下载
    如何使用C<b class='flag-5'>语言</b>实现软复位<b class='flag-5'>详细资料</b>说明

    单片机的常量和变量与数组的详细资料说明

    本文档的主要内容详细介绍的是单片机的常量和变量与数组的详细资料说明包括了:单片机的常量,单片机的变量,构造类型:数组,构造类型:结构体,构造
    发表于 12-11 17:36 13次下载
    单片机的常量和<b class='flag-5'>变量</b>与数组的<b class='flag-5'>详细资料</b>说明

    存储器及接口设计的详细资料说明

    本文档的主要内容详细介绍的是存储器及接口设计的详细资料说明。
    发表于 03-18 14:25 17次下载
    <b class='flag-5'>存储</b>器及接口设计的<b class='flag-5'>详细资料</b>说明

    C语言教程之函数的详细资料说明

    本文档的主要内容详细介绍的是C语言教程之函数的详细资料说明包括了:1 函数概述 ,2 函 数 定 义 ,3 函数的调用 ,4 函数参数传递 ,5
    发表于 03-21 15:39 9次下载
    C<b class='flag-5'>语言</b>教程之函数的<b class='flag-5'>详细资料</b>说明