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()中定义 { 般
l
了形式参数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。这时
(作者单位:江苏省海安职业教育中心)
版权声明:本文标题:内存空间值的演变在C语言教学中的应用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1713905076a657000.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论