变量的储存方式

简介: 变量的储存方式

一 动态存储方式与静态储存方式

    按变量的生存期来区分,变量有动态存储方式和静态存储方式两种类型。其中全局变量全部存放在静态存储区中,而函数形式参数、自动变量、函数调用时的现场保护和返回地址存放在动态存储区中。

二 局部变量的存储类别

1 自动变量(auto变量)

函数中的局部变量(不包括static存储类别)都是动态的分配存储空间的,数据存储在动态存储区的。在调用该函数时,系统会自动给这些变量分配存储空间,在函数调用结束时就自动释放存储空间,因此这种局部变量被称为自动变量。

关键字auto可以省略不写,并且程序中大多数变量都属于自动变量。

2 静态局部变量(static局部变量)

 有时候希望函数中的局部变量在函数调用结束后不消失而继续保留原值,即其占用的内存单元不释放,在下一次调用该函数时,该变量已经有值,这时该变量就被称为静态局部变量。

下面用代码来直观的表示静态局部变量的特点:


763539e3804d4c67a5ffd47dc4640e37.png

说明:

  1. 静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行的期间都不会释放。而自动变量(即动态局部变量)属于动态存储类别,分配在动态存储区空间而不在静态存储区空间,函数调用结束后即释放。
  2. 静态局部变量不能被其他函数引用,因为它是局部变量。
  3. 静态局部变量在函数内是可见与存在的,在函数外是存在的,但是不可见。
  4. 静态存储要多占内存,而且降低了程序的可读性,因此若非必要,不要多用静态局部变量。

另外,再向大家分享一个题目,输出1到10的阶乘值。这个题的方法很多,在这儿我就用一种方法来实现,话不多说,直接上代码。

cfc9c2a0da7d4b37ab70f4e1bd74af08.png

   当i=1时,a=1,返回数值1;当i=2时,由于a是static变量,程序运行时不会释放a的空间,a=1✘2,返回数值2;当i=3时,a=1✘2✘3=6,返回数值6;后面依次类推。

3 寄存器变量(register变量)

  如果有一些变量使用频繁,则为存取变量的值要花很多时间,为提高其执行效率,允许将局部变量的值放在CPU的寄存器中,需要时直接从寄存器取出参加运算,不必再到内存中去取,大大的提高了程序的执行效率,这种变量就叫做寄存器变量。

三 全局变量的存储类别

1 在一个文件内扩展外部变量的作用域

调用函数 ,求3个整数中的最大值:


c417bfb812004cb29dffd44670007d1f.png

由于a,b,c定义在max函数前面,该函数就不需要有参数传递了,因为max函数可以直接使用外部变量a,b,c的值

2 将外部变量的作用域扩展到其他文件

文件1中:

6e5ad300d4564e158702413acd875ca9.png

文件2中:

8e67fea6ceb644aba8e6d6cef051f163.png

3 将外部变量的作用域限制在本文件中

在定义外部变量时在前面加一个static声明,这种变量就叫做静态外部变量,这种变量在整个执行期间不释放,其所分配的空间始终存在,它的作用域只限于本文件模块。

总结

a3485e7f244a4d01b617cf49994105dd.jpg


好了 ,今天的分享就到了这里了,希望大家能提出些建议,一起共同进步。

 

目录
相关文章
|
26天前
不使用第三方变量的情况下交换两个数值
不使用第三方变量的情况下交换两个数值
18 1
|
6月前
|
Python
python之数据的赋值方式,变量内存地址的获取方式,获取变量名的方法,不同方法之间的区别
python之数据的赋值方式,变量内存地址的获取方式,获取变量名的方法,不同方法之间的区别
|
2月前
|
算法 搜索推荐 数据处理
值交换解析法(无第三方变量法)
值交换解析法(无第三方变量法)
20 0
|
4月前
对调 2个变量的值若干种方式
对调 2个变量的值若干种方式
12 0
|
7月前
|
C++
临时变量
临时变量
23 0
|
7月前
|
存储 数据库 Python
保存变量
在编程中,"保存变量"通常指将一个变量的值保存到文件或数据库中,以便在程序下次运行时能够再次使用该值。这个过程通常称为"持久化",因为变量的值被保存到磁盘上,从而使得程序能够跨越多个会话。
45 1
|
9月前
|
存储 小程序 编译器
数据在内存中的存储形式
数据在内存中的存储形式
|
10月前
|
存储 小程序 编译器
C-数据的储存(1)
C语言学习第十五弹
|
10月前
|
存储 人工智能 C语言
C—数据的储存(2)
C语言学习第十六弹
|
11月前
如何在把创建临时变量的前提下交换两个数(直接上代码)
如何在把创建临时变量的前提下交换两个数(直接上代码)