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

    文章

    7597

    浏览量

    136117
  • 函数
    +关注

    关注

    3

    文章

    4303

    浏览量

    62411
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28327
收藏 人收藏

    评论

    相关推荐

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

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

    C语言函数手册详细资料大全(免费下载)

    C语言函数手册详细资料大全(免费下载) 包括了各种C语言函数的:功能,用法,程序例
    发表于 06-04 08:07 81次下载

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

    本文档的主要内容详细介绍的是C++语言入门教程之C++语言程序设计函数的
    发表于 09-20 14:51 23次下载

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

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

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

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

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

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

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

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

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

    本文档的详细介绍的是C语言标准教程之C语言基础知识的详细资料
    发表于 02-15 11:26 6次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>标准教程之<b class='flag-5'>C</b><b class='flag-5'>语言</b>基础知识的<b class='flag-5'>详细资料</b>说明

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

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

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

    本文档详细介绍的是C语言实用教程之函数的详细资料说明主要内容包括了:1程序设计的艺术性,2函数的定义与使用,3函数的作用域和
    发表于 02-26 14:43 3次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>实用教程之函数的<b class='flag-5'>详细资料</b>说明

    C语言程序设计教程课件之函数的详细资料说明

    本文档详细介绍的是C语言程序设计教程课件之函数的详细资料说明主要内容包括了:1.概述,2.函数的定义,3.函数的返回值,4.函数的调用,5.
    发表于 02-28 10:35 3次下载
    <b class='flag-5'>C</b><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>说明

    C语言教程之数据类型与运算符的详细资料说明

    本文档的主要内容详细介绍的是C语言教程之数据类型与运算符的详细资料说明主要内容包括了:数据类型,常量与
    发表于 03-01 17:20 8次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>教程之数据类型与运算符的<b class='flag-5'>详细资料</b>说明

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

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

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

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