admin 管理员组

文章数量: 1087139


2024年4月24日发(作者:属性的定义)

编辑l磐E姜菁I -EmXai l: zhiyRezIazEhi@Nlc63E.jcosnr I交漆.^ -H i ̄IIW平台 

内存空间值的演变在c语言教学中的应用 

C语言是国际上广泛流行的计算机高级程序设计语 

言,它适合作为系统描述语言,既可以用来编定系统软 

件,也可以用来开发应用软件。在多年的中职计算机教 

学中,.笔者发现学生很难理解程序的执行过程。经研究 

发现,问题的关键是学生不能建立抽象的内存概念。什 

么是内存?内存在程序运行中起什么作用?程序运行过 

程中值是如何变化的?对这些问题,大部分学生模糊不 

清。在教学实践中,笔者探索建立了内存空间模型,形 

象直观地帮助学生理解程序执行中变量的变化。 

内存及其作用 

目前我们所说的计算机系统是由5大部分组成的,分 

别是控制器、运算器、存储器、输入设备和输出设备。 

其中存储器是信息存放的载体,有了存储器,计算机才 

能有记忆功能,才能把要计算和处理的数据以及程序存 

入计算机,使计算机在不需要人工干预的情况下自动运 

行。存储器主要分为外存和内存。外存用来长期保存信 

息,如硬盘、光盘、U盘等;通常所说的内存主要是指主 

板上的内存条,由于它靠近CPU,所以它的存取速度较 

快。它用来存放当前正在运行的程序及数据,因此内存 

的容量越大,存放的信息就越多,计算机系统的功能就 

越强。内存的容量大小是用多少字节来表示的,为了区 

分内存空间,系统将内存空间以一个字节为一个单位进 

行线性编址,这样内存中的每一个字节空间都有一个唯 

的地址来加以区分。 

二、C语言中不同存储类别的变量内存空 

问模型的建立 

C语言最大的特点是程序能够直接对内存地址进行操 

作。而对内存的操作主要是通过变量来实现的,变量代 

表了内存中具有特定属性的一个存储单元,它是用来存 

放程序运行期间的数据的,也就是变量的值。这些值是 

可以改变的,一个变量有一个名字,即变量名。变量名 

实际上代表了一个内存地址。c语言在对程序进行编译 

连接时,由编译系统给每一个变量名分配对应的内存地 

址。对变量的存取,实际上是通过变量名找到相应的内 

存地址,再在该地址的存储单元中读写数据。而要正确 

文/陈华国 

教的学变效量麓C果有。 多 三种语存言储中 一 自 蝴 H H  L— 部叠  自裟}_lc一 。 

三、变量的内存空问模型在教学中的应用 

中职学生要学好C语言,程序阅读能力很重要,要能 

够通过阅读程序,写出程序运行的正确结果。为此,学 

生必须弄清程序运行过程中各个变量的值的变化情况。 

为了帮助学生理解程序运行过程,在c语言教学过程中, 

笔者利用内存空间模型来解释程序运行过程中不同变量 

的值的变化情况,从而使抽象的程序运行过程变成了看 

得见的、形象的过程。 

下面以求n的阶乘的和为例,来看看内存空间模型 

在C语言教学中的具体应用。n的阶乘的和S=l!+2 1+…… 

+n!。 

#inc1ude<Stdi0.h> 

int s=O: 

VOid fun(int i) 

{statiC int p=1: 

p=p爿ci: 

S S+p: 

Pri nt f( 被调函数fun(%d)执行后求得%d的阶 

乘:p=%d,前%d项阶乘的和:s=%d\n ,i,i,p,i,S): 

) 

VOid main() 

{int i,n: 

printf( 请输入n的值: ): 

scanf( %d ,&n): 

for(i=i:i<=n:i+十) 

{ 

OCCUPA11ON 

2O11 '2 

固 

交流平台 

fun(%d)。\n ,i,i): 

fun(i): 

) 

E S 。zh他i01山63.c之om石 

数f u n(),先蒋 

执行p=p}i,即区 

p=l 2:2, 将2赋 

给P,P中原来的 

调豳颤m 

■眦 

n…— 4 

s 

printf( \n主调函数mein()第%d次调用被调函数 

系统开始执行函静 

l、k3 

s— 1+ 

"I"-2 l p 

扫肿 -・扣 

棱i髓嘲[f '叫i) 

置嘲 

printf( \n程序执行结果:%d的阶乘的和=%d\n\ 

n 。n,s): 

) 

值2被覆盖;而后契 

… 

2 

执行s=s P,即傅 

.、

? 

以上程序中定义了全局变量S并赋初值为0。在主 

S=1+2=3,将3赋 

调函数main()中定义局部变量i和n,程序运行时n的值 

给S,S中原来的值 

黪2 \ 

蛤附参 , 

通过键盘输入4,i赋初值为静l 

1被覆孟。故第2次调用函数fun(2)后,各变量所对应 

s 

 o 

1;在被调函数fun()中定义 { 般 

了形式参数i,其值是通过主 

调函数实际参数i传过来的。 

l I p 

的内存空间的值如图5所示。 

自 

融矗■盎窑■ 

第3次调用 ̄[fun()时,将主调函数中实际参数 

i的值3传递给形式参数i,即形式参数i 3。这时系统 

开始执行函数fun(),先执行p=p}i,即p=2 3=6,将 

6赋给P,P中原来睁 

l 9 

i 

另外,还定义了局部静态变量 l 一 

P,在程序编译时系统为该变蠢{ 

量在内存的静态存储区域指定 

存储空间,并赋初值为1。程 

l 

图2 

的值2被覆盖;而蚕 

后执行S:S P,即一 

S=3+6=9,将9赋给 

S,S中原来的值3被 

主调蹦H- ) 

置部变量 

12…・ 

。‘ 

s 

《 一 

2・3I6 

I p 

键i嘲 i) 

序编译时系统为各变量分配的内存空间模型如图2所示。 

当程序运行时输入4.程序执行结果如图3所示。 

舶寅■ 

4 

从以上执行结果看到,程序中共计调用了4次子函 覆盖。故第3次调用 

数fun(),即主 

、3 

P"h ̄fun(3)后,各傻 

/实参3传、 

变量所对应的内存空 

间的值如图6所示。 

蛤 

函数中for()循环 

了4次。而每次调 

用时参数的传递和 

各内存值的变化情 

况如何呢?下面通 

图6 

第4次调用函数fun()时,将主调函数中实际参数 

i的值4传递给形式参数i,即形式参数i=4。这时系统 

开始执行函数"fun(),先执行p=p}i,即p=6.4=24, 

将24赋给P,P中原来的值6被覆盖;而后执行S=S p, 

图3 

过内存空间模型来 

讲解程序运行的过 

即s 9 24 33,将静 

程。由于全局变量S和局部静态变量P都是静态的,它们 

保存在静态存储区域,因此在程序运行期间这两个变量 

所对应的内存空间的值将长期存在。 

33赋给s,S中原来蒋 

的值9被覆盖。故区 

第4次调用函数fun 

(4)后,各变量所 

主调豳段 

—黻置 

n…— 

一 

s 

、 

l , 

 lp 

鲁 

第1次调用函数fun()时,系统为形式参数i开辟相应 

4 

的内存空间,并将主调函数中实际参数i的值1传递给形式 

对应的内存空间的契 

参数i,即形式参数i静 

=1。这时系统开始 

执行函数fun(), 

先执行P=P i,即 

p=1 1=1,将1赋给 

主谰匣敷m蛐 

置邬变量 

n… 

’。。 

4 

l 

1 

s 

值如图7所示。 

f I 

I p 

博 

鲁 

通过图4、图 

K ) 

图7 

5、图6和图7,我们 

能清晰地看到以上程序执行过程中变量的值是如何一步 

步变化的,以及最终的程序运行结果是如何求得的。 

P,P中原来的值1 

在c程序设计语言教学中,笔者发现学生要学会写 

程序必须先要学会阅读程序,通过阅读程序理解程序的 

执行过程。因此培养学生的程序阅读能力至关重要。为 

被覆盖;而后执行艘 

/实参l传、 

S=S+p,IlPs=O+l=l, 

绐腩 

将1赋给S,S中原来 

图4 

此,在c语言教学中,笔者一直坚持通过建立内存模型来 

讲解程序的执行过程,使得枯燥的、抽象的c语言学习变 

得形象、生动、有趣,从而极大地激发了学生学习的主 

的值0被覆盖。故第1次调用函数fun(1)后,各变量所对 

应的内存空间的值如图4所示。 

 

第2次调用函数fun()时,将主调函数中实际参 

动性,也受到了很好的教学效果。

数i的值2传递给形式参数i,即形式参数i=2。这时 

(作者单位:江苏省海安职业教育中心) 


本文标签: 内存 变量 程序 过程 程序运行