问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言变量的储存类别及各自的特点

发布网友 发布时间:2022-03-31 07:16

我来回答

2个回答

热心网友 时间:2022-03-31 08:46

你自己根据需要归纳吧~

C语言变量存储类型

auto
static
extern
static extern
register

auto 局部变量

auto 变量是用堆栈(stack)方式占用储存器空间,因此,当执行此区段是,系统会立即为这个变量分配存储器空间,而程序执行完后,这个堆栈立即被系统收回.在大括号{}内声明.
自动变量就是指在函数内部定义使用的变量。他只是允许在定义他的函数内部使用它。在函数外的其他任何地方都不能使用的变量。自动变量是局部变量,即它的区域性是在定义他的函数内部有效。当然这说明自动变量也没有链接性,因为它也不允许其他的文件访问他。由于自动变量在定义他的函数的外面的任何地方都是不可见的,所以允许我们在这个函数外的其他地方或者是其他的函数内部定义同名的变量,他们之间不会发生冲突的。因为他们都有自己的区域性,而且它没有链接性(即:不允许其他的文件访问他的)。来看看自动量的持续性。计算机在执行这个函数的时候,创建并为它分配内存,当函数执行完毕返回后,自动变量就会被销毁。这个过程是通过一个堆栈的机制来实现的。为自动变量分配内存就压栈,而函数返回时就退栈。

static 静态变量

一、局部静态变量
局部变量按照存储形式可分为三种auto, static, register。
与auto类型(普通)局部变量相比, static局部变量有三点不同:
1. 存储空间分配不同
auto类型分配在栈上, 属于动态存储类别, 占动态存储区空间, 函数调用结束后自动释放, 而static分配在静态存储区, 在程序整个运行期间都不释放. 两者之间的作用域相同, 但生存期不同.
2. static局部变量在所处模块在初次运行时进行初始化工作, 且只操作一次。
3. 对于局部静态变量, 如果不赋初值, 编译期会自动赋初值0或空字符, 而auto类型的初值是不确定的.
特点: static局部变量的”记忆性”与生存期的”全局性”
所谓”记忆性”是指在两次函数调用时, 在第二次调用进入时, 能保持第一次调用退出时的值.

注意事项:
1. “记忆性”, 程序运行很重要的一点就是可重复性, 而static变量的”记忆性”破坏了这种可重复性, 造成不同时刻至运行的结果可能不同.
2. “生存期”全局性和唯一性. 普通的local变量的存储空间分配在stack上, 因此每次调用函数时, 分配的空间都可能不一样, 而static具有全局唯一性的特点, 每次调用时, 都指向同一块内存, 这就造成一个很重要的问题 ---- 不可重入性!!!
二、外部静态变量/函数
在C中static有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。, 但为了*全局变量/函数的作用域, 函数或变量前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。注意此时, 对于外部(全局)变量, 不论是否有static*, 它的存储区域都是在静态存储区, 生存期都是全局的. 此时的static只是起作用域*作用, 限定作用域在本模块(文件)内部.
使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

extern 变量

外部变量 定义在程序外部,所有的函数很程序段都可以使用.

外部变量可能会在某一程序段被重新定义,以段内变量为参考值.

static extern 变量

静态外部变量和外部变量差别在于,外部变量生命可以同时给多个文件使用,而静态外部变量则只能给声明此变量的文件使用.

register 变量

寄存器变量,是由寄存器分配空间,访问速度比访问内存快,加快执行速度.寄存器大小有限.

在c语言当中可以使用寄存器变量来优化程序的性能,最常见的是在一个函数体当中,将一个常用的变量声明为寄存器变量: register int ra; 如果可能的话,编译器就会为它分配一个单独的寄存器,在整个函数执行期间对这个变量的操作全都是对这个寄存器进行操作,这时候就不用频繁地去访存了,自然就提高了性能。
不能用于全局变量。现在的情况是VC忽略用户定义的REGISTER,因此定义一个REGISTER变量与不定义一个REGISTER是一样的,编译器进行相同的优化,因为MS认为,REGISTER是系统中宝贵的资源,应该由系统统一调配,而且认为VC编译器的优化能力要大于一般的程序员。因此也有人说register关键字在PC机(x86CPU)无用,编译器按自动变量处理。
注意: register是不能取址的。
register int j; int *p = &j;是错的,因为无法对寄存器的定址。

热心网友 时间:2022-03-31 10:04

全局变量全部存放在静态存储区中,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
你能用一句话表达这个画面吗 专科学高铁乘务专业能找到工作吗 广西理工职业技术学院怎样啊?? 月亮星座怎么配对,月亮星座配对查询爱情 广西理工职业技术学院到底好不好的 最甜蜜的月亮星座组合,最冷血的月亮星座 包子怎么做才松软 包子如何做才松软 包子店的包子发酵怎么这么松软 专做俄罗斯业务的货代公司 大理石地板怎么拖干净又亮妙招 部落战阵型怎么布置 部落冲突9本最强部落战 部落冲突速9本什么阵型好 自创九本神阵推荐 “部落冲突9”本最强神阵,护资源护黑有吗? 哪位大佬有部落冲突九本最佳阵型,请带链接! 部落冲突九本部落战神阵怎样排 《部落冲突》9本用什么兵好 《部落冲突》九本超强螃蟹神阵布局解析 《部落冲突》九本玩家打金技巧图文解析 这个是设计签名软件叫什么名字? 唉 什么是艺术签名啊? 什么是个性签名 艺术签名 签名设计的出现背景 有没有免费签名logo设计 怎样用PS设计自己的签名LOGO 守望先锋卢西奥怎么爬墙 飞檐走壁小技巧 如何制作个人签名logo 守望先锋卢西奥与秩序之光什么仇什么怨? 设计个自己的签名或标志,代表我个人的符号,怎么... 守望先锋卢西奥被削弱了吗 求一个部落冲突9本最强神阵,护资源护黑。 部落冲突九本阵型有哪些 九本阵型分享推荐 coc部落冲突 九本神坑阵如何破 部落冲突9本摆字阵 部落冲突9本坑人神阵是什么 《部落冲突》九本有吹风机逆反神阵型分享 详解怎么玩 部落冲突9本最强防御是多少级 部落冲突九本部落战怎么配兵怎么打? 部落冲突9本应该如何玩,先升哪些比较好,用什么流... 部落冲突九本职业赛阵型是什么样的? 求部落冲突九本,护本神阵 求部落冲突9本阵 怎么开导女儿早恋 发现上初中的女儿早恋,我应该怎样劝她放弃? 我的女儿早恋怎么办 十四岁的女儿早恋了怎么办 如果女儿早恋了妈妈应该怎么和女儿沟通 12岁女儿早恋怎么办 发霉的锅洗干净了还能用吗 发霉的锅子洗了还能用吗