基于思维的C语言指针教学

更新时间:2024-02-17 作者:用户投稿原创标记本站原创 点赞:28126 浏览:131172

摘 要 :在C语言的教学中,如何让学生理解、掌握和灵活应用指针一直是教学的难点.文章研究了基于创新思维的C语言指针教学方法,引导学生自我发现问题、解决问题,达到学以致用的目标.

关 键 词 :C语言指针;创新思维;探究发现;学以致用

中图分类号:G712 文献标识码:A 文章编号:1671-0568(2013)32-0075-02

指针是一个重要的数据类型,指针的应用可以使代码高效、简洁,但也最容易出错.指针在函数传值、内存使用、数组遍历等使用上的灵活性及其类型的多样性,使得指针教学成为C语言教学的重点,也是难点,是教师与学生花精力和时间最多,而效果相对较差的知识点.在C语言教学中,指针的讲授往往处于非常尴尬的地位,教师与学生都感到心有余而力不足.

一、教学现状

指针的类型很多,这是学生正确使用指针的一大障碍.指针变量的值是一个整数(内存字节编号),但与int不同,它代表内存的一个地址,需符合系统的地址编码规则.使用时可以指向不同的数据类型,学生很容易犯错.

C语言规定,指针变量只能进行加减法运算:指针变量-指针变量,参与运算的指针变量必须是同类型的指针变量并指向同一块有效的内存区域才有意义,其结果是一个整数;指针变量的值±整数其结果为指向同一块有效的内存区域,且该内存区域保存的数据类型与指针变量类型相同才有意义,对比较运算也有相同的限制.这也是学生很难理解的知识点,使用时容易出错.

讲授指针赋值操作时,只是告诉学生有两种方式:一种是把某个同类型变量的地址或同类型指针变量的值赋给一个指针变量;另一种是把申请内存库函数的返回值赋给一个指针变量.学生难以理解直接赋一个地址给指针变量为什么经常出错.

二、基于创新思维的教学

1.创新思维内涵

创新思维就是把已有的思维材料进行整理抽象,以适应新的环境,进而求解新的问题.在教学中,采用何种方法能启发学生获得知识呢?美国教育家布鲁纳主张教学采用“探究发现”法,引导学生像科学家那样探求知识,而不是被动接受教师的灌输.不论是在校学生的发现,还是科学家致力于日趋尖端的研究领域的发现,按实质来说,都是把现象重新组织和转换,使人能超越现象再进行组合,从而获得新的领悟.

对教学而言的创新思维,一般是指对引导学生利用已有的知识,发现新问题、引入新方法、解决新问题,使学生了解创新的过程与方法,理解理论源于实际的本质,进而培养学生的创新思维和科学素养.

2.基于创新思维的指针教学

C语言规定,指针变量只能保存地址,其实在学习指针之前,学生已经使用过地址.如代码int x;scanf(“%d”,&x);&x就是变量x的地址,代码的含义就是声明一个int型变量x,并把x的地址传给scanf()函数.学习指针之前,只告诉学生记住变量前的&;学习指针之后,教师就应根据内存模型,告诉学生在计算机中每个内存空间(字节)对应的地址是唯一的,scanf函数功能就是把从键盘上输入的数据保存在内存中,供主调函数使用.所以,主调函数只要把变量地址(内存地址)传递给scanf函数即可.这个地址是对scanf函数,主调函数都是可见,因而都可以操作其中的数据,这样就实现了scanf函数的功能.

为了引导学生利用创新思维,学习新知识指针.可以帮助学生回顾,当计算机执行类似int x;这样的声明语句时,系统的行为,来建立新旧知识的联系.①系统给x分配了与int类型相符的连续空间(vc是4字节);②系统记录了这个空间第一个字节的编号,即x的地址;③系统标识了这个空间中保存的数据是int类型的数据.

在程序开发中,经常需要把多个具有相同属性的数据保存在连续区域,而数据的个数需要到运行时才能确定.只要能记住这块内存开始的位置(即内存地址,也就是第一个字节的编号),通过简单的加减整数操作访问到全部的数据.

首先,教师需要引导学生思考,C语言程序要实现这种场景就必须引入新的数据类型:这个数据类型的变量可以保存数据空间地址,可以与一个整数相加减,还需要标识保存在数据空间中的数据的数据类型.指出这种新数据类型就是C语言中的指针类型,它具有两种属性(地址及保存在该内存空间数据的数据类型),给出新的数据类型——指针变量的声明格式.例如,int * x;其中*标识x是一个指针变量,int标识这个x中只能保存int类型数据空间的地址.

其次,教师引导学生分析这种新的数据类型,如int *x;根据学过的变量声明格式可知,x是一个int *类型的变量(int类型的指针变量),*x是一个int类型的变量.通过例子,利用数据的有效性,使学生明白x中的值必须是系统分配给程序的有效内存的地址才有意义,从而理解指针运算的本质.此时,学生经历一个完整的发明过程,从应用中发现现有知识不能解决或不完美,进而引入一个能解决问题的新数据类型来圆满解决问题.这就是创新思维.学生在学习新知识的同时,建立了新旧知识的联系及使用场景.

最后,教师指导学生进行总结,声明指针变量时(int *x;),系统的行为:①系统给x分配了与地址值相符的连续空间(vc是4字节);②系统记录了这个空间第一个字节的编号,即x本身的地址;③系统标识了x中只能指向保存int类型数据的内存空间;④x中的值必须是系统分配给程序的有效内存空间的地址才有意义.

引导学生总结指针变量的运算规律,计算机的内存有很多,但只有系统分配给程序的内存才能被使用.在程序中对指针变量进行操作,其本质是为了对指针变量所指向的内存地址中的数据进行操作.要使指针变量指向有效的内存空间,那么指针变量与指针变量之间只是减法运算,而且参与运算的指针变量是指向同一块连续的内存空间才有意义.指针变量与整数运算的结果一定是与指针变量所指向地址属于同一块连续的有效内存空间才有意义.

对于比较运算来说,其本质是由地址的特点决定的:地址值是内存空间编号,只是序号而已.因此,指针变量的比较运算只是为了确定内存空间的位置关系,而内存空间的位置关系只有指向同一块连续的有效内存空间才有意义.加法、乘法、除法等运算,都不能保证运算结果,是一个系统分配给程序的有效内存地址,因而C语言规定指针变量进行这些运算是不合法的.

基于创新思维的教学,引导学生按照知识获取的规律学习,理论源于实践,当原有的知识不能解决问题时就需引入新的理论,并利用新知识解决问题,达到学以致用的目标.