李 宁
(安徽财贸职业学院,合肥 230601)
C语言教学中指针的教法探究
李宁
(安徽财贸职业学院,合肥230601)
摘要:指针是C语言教学的重点,也是教学的难点,文章分析了指针与各种数据对象之间的关系,使学生能够深入理解和掌握指针的应用。
关键词:指针;地址;数组;函数;启发式教学
指针,一直被认为是C语言中的精华。只有掌握了指针,才能说你学会了C语言。指针知识内容抽象、逻辑性强、易混淆和遗忘。基于此,笔者结合多年C语言教学经验,从指针教学的导入、概念的明确、指针与各种数据对象之间的关系几方面,对指针进行了分析和探讨,取得了良好的教学效果,为后继课程的学习打下了坚实的基础。
在前面C语言的学习中,同学们已经清楚的有了常量和变量的概念,如果在程序中定义了一个变量,在对程序进行编译时,系统给这个变量分配内存单元有两种方式:
(1)按变量地址存取变量值的方式称为“直接访问”方式,如int i,j,k;Printf(“%d”,i)。
(2)另一种存取变量值的方式称为“间接访问”的方式。即将变量i的地址存放在另一个变量中, 如int&pointer_1=&i。
可以打个比方,(1)就相当于我们直接可以打开抽屉,存取里面的物品。(2)是我们从另外一个房间,拿出打开抽屉的钥匙,才能存取里面的物品。由上得知:指针就是地址,是指向目标单元的地址。计算机在运行时,数据总是要存储在内存中以备CPU的不时之需,为了能够有效地访问数据,计算机系统必然要对内部存储单元进行编号,就像门牌号一样,有了明确的编号,总控才能快速而准确地定位并访问内存,顺利地将数据提取出来。所以我们要引入地址的概念,地址就是我们所说的指针。
如果有一个变量专门存放另一变量的地址(即指针),则它称为“指针变量”,可以用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向一个该变量。
2.1在定义指针变量时要注意两点:
(1)指针变量前面的“*”,表示该变量的类型为指针型变量。例:fl oat *pointer_1;指针变量名是pointer_1 ,而不是* pointer_1 。
(2)在定义指针变量时必须指定基类型。需要特别注意的是,只有整型变量的地址才能放到指向整型变量的指针变量中。
2.2在对指针变量赋值时需要注意两点:
(1)指针变量中只能存放地址(指针),不要将一个整数直接赋给一个指针变量。
(2)量地址不能是任意的类型,而必须是与指针变量的基类型具有相同类型的变量的地址。
(1)指针与普通变量。如:int a=1,b=2;int *p1=&a,*p2=&b;上述指针变量p1、p2直接指向普通变量,这种指针称为一级指针,如有定义:int a,*p,**q;则p为一级指针,q为二级指针;引用a的方法即有三种:a、*p、**q。
(2)指针与数组。引用一个数组元素,可以用下标法,如a [i]形式或者指针法,如*(a+i)或*(p+i)。其中a是数组名,p是指向数组元素的指针变量,其初值p=a。当指针变量p指向数组首地址时,p+1就等价于a+1,也等价于&a[1],也就是说p+i、a+i和&a[i]三者是等价关系。由此可知:*(p+i)、*(a+i)和a[i]及p[i]四者是等价关系。
(3)指针与字符串。实际应用中人们常用字符指针指向字符数组的元素,以便通过这种指针使用字符数组的内容。最常见的情况是令字符指针指向字符串,不仅字符串可以是常量字符串,还可以是存储着字符串的字符数组。
字符数组和字符指针变量二者之间的区别主要有以下几点:
1)字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址,决不是将字符串放到字符指针变量中。
2)定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个字符变量的地址。
(4)指针与函数。如果在程序中定义了一个函数,在编译时,编译系统为函数代码所分配的一段存储空间,这段存储空间所在的起始地址(又称入口地址),称之为函数的指针。而且还定义一个指向函数的指针变量,用来存放某一函数的起始地址,这就说明此指针变量指向该函数。
所以在使用指针时,容易发下各种错误,比如指针未初始化、指针越界,指向局部变量的指针、指针指向的转移方向的错误等等。但是其也有很多优势,比如为支持C 动态分配子程序;函数提供修改调用变元的灵活手段;其作用于改善某些子程序的效率;而且还为该动态数据结构(如二叉树、链表)提供了支持等。
学生在刚开始使用指针时,由于对概念理解的不透彻,经常会出现一些莫名奇妙的逻辑错误,因此对指针非常畏惧。所以教师在讲授指针时,一定不能采取满堂灌的教学方法,过多强调语法细节。应采取启发式教学模式,用浅显的实例,导入这部分内容;用PPT和板书相结合,给学生充分理解和思考的时间;多采用图示、动画、类比等形象直观的方式帮助学生理解,一步步地化解难度,教才会有成效,学也会有所成,才能为数据结构等后续课程的学习打下坚实的基础。
参考文献:
[1]裴新凤.如何正确地使用C语言的指针[J].西北民族学院学报,1999,20(06):41-43
作者简介:李宁(1981-),女,天津人,本科,讲师,主要研究方向为软件设计。