当前位置:首页 > 教学设计 > c语言函数指针 C语言指针教学中的常见问题及教法探析
 

c语言函数指针 C语言指针教学中的常见问题及教法探析

发布时间:2019-06-28 04:05:06 影响了:

  摘要:“指针”是C语言中比较难以掌握的一个概念,是学习的难点。该文对C语言指针运用中常见的错误进行了分析,提出了改进教学的方法,提高了学生理解和运用指针的能力。   关键词:C语言;指针;教学方法
  中图分类号: G64文献标识码:A文章编号:1009-3044(2012)17-4168-02
  The Frequently Asked Question and Analysis Methods in the C Program Language Pointer Teaching
  SHI Juan
  (Qinghai Architectural Vocational and Technical College, Xining 810012, China )
  Abstract:“pointer”is a concept which more difficult to grasp in the C Program Language, it is the difficulty of learning. It make a analysis for the C program language pointer to the use of common errors, and proposed the way of improve teaching methods, and improved the ability of students to understand and use the pointer in this article.
  Key words: C program language; pointer; teaching methord
  《C语言程序设计》是计算机专业的一门专业基础课,目的是培养学生的编程思想,训练学生用计算机语言解决实际问题的能力,为今后进一步深入地学习计算机专业知识打下基础。指针是C语言中的一个重要概念,内容灵活多变不易掌握,是学生学习的一个难点,因此,该文针对指针运用中的常见错误进行了分析,并提出了改进教学的方法,以便学生更好地掌握。
  1使用指针时的常见问题
  如同其它基本类型的变量一样,指针也是一种变量,但它是一种把内存地址作为其值的变量。因为指针通常包含的是一个拥有具体值的变量的地址,所以它可以间接地引用一个值。利用指针可以使得程序代码书写得更简洁、效率更高,前提是一定熟悉指针的运用,牢牢掌握概念不可滥用,否则不但会降低程序的可读性,严重的情况下还将导致系统崩溃。
  下面对指针使用中的常见错误进行总结:
  1.1未对指针变量进行初始化
  例如:main( )
  { int a=80,*ps;
  *ps=a;
  *ps+=10;
  printf(“a=%d”,*ps);
  }
  本例中存在的错误是没有对指针变量进行初始化。我们知道在指针变量中存放的是指定变量的地址,如果进行初始化,那么这个指针指向的地址是随机的,而不是我们想象的null值。因此有可能让指针ps指向一个“危险”的区域,导致程序发生不可预料的错误,甚至造成系统死机。解决此类问题的方法是让指针指向一个有效的地址。本例应将*ps=a;改为*ps=&a,修改后运行结果为90。
  1.2二维数组中指针类型错误
  例: main()
  { int a[2][2]={1,2,3,4},*p;
  for(p=a;p  printf(“%d”,*p);
  }
  上例中定义了一个二维int型数组a,因此a是一个二级int型指针,而a[0]是一维int型指针,二者指向的对象和类型都不同,虽然a[0]和a的值相同,p是指向int型数据的一级指针变量,只有接受a[0](即&a[0][0]),不能接受a。因此本例应该将p =a;改成p=a[0];或者p=*(a+0)。
  1.3指针移动越界
  例:main()
  { char *pa,str[80];
  pa=str;
  do
  { gets(str);
  while(*pa) printf“%c”,*pa++);
  } while(strcmp(*pa,“end”));
  }
  在这个例子中,指针初始化时指向字符数组str的首地址。执行完while(*pa) printf“%c”,*pa++);指针指向了str的末尾,在外层循环中指针pa是无法预料的,它指向数组str最后一个元素之后,这是错误的。应该在do循环中加入语句pa = str;使指针在自增操作后指向数组的开始位置。
  1.4指针与字符串
  例: main()
  {char *pa =“c language.”;
  pa=‘C’;
  printf(“%s”,pa);
  }
  程序中虽然没有定义字符数组,但字符串在内存中是以数组的形式进行存放的,有一个起始地址,并且占用一片连续的空间,以\0结束。
  char *p =“c language.”;的作用是让指针pa指向字符串的起始地址,因此应将pa=‘C’改为pa[0]=‘C’。
  1.5指针的算术运算
  指针变量是有加减运算的,但是要注意以下几点:
  1)指针变量中存放的是地址值,也就是一个变量的地址。指针变量可以加减,但是只能与整型数据加减,指针变量“加上”或“减去”一个整数m,相当于指针变量加上或减去m个指针所指向数据的存储单位,即指针由当前指向位置向后或向前移动m个指针所指向数据的存储单位。
  加减运算常用于数组的处理。对指向一般数据的指针,加减运算无实际意义。例如;
  int a[10],*ps=a,*x;
  x=ps+3;/*实际上是ps加上3*2(因为int型数据在内存中占2个字节)个字节赋给x,x指向数组的第三个元素*/
  2)指针之间可以相减,但不可以相加。两个同一类型的指针变量是可以相减的,他们的意义表示两个指针指向的内存位置之间相隔多少个元素(注意是元素,并不是字节数),一般用于数组处理。例如对于int类型的指针p和p1,p1-p的意义表示他们之间相隔多少个int类型的元素。同样对于其他类型的指针变量之间相减的意义也是一样。指针变量的自加和自减实际上是与整数1的加减运算。
  2改进教学方法,提高学习效率
  2.1采用板书教学
  目前,采用多媒体课件进行教学已经是比较普遍的教学形式了,但是由于C语言指针的概念比较抽象复杂,应用灵活多变,不易掌握,是学生学习的难点,根据以往的教学经验,感觉采用黑板板书的教学方法,教学效果明显好于多媒体。利用板书进行教学,既可以让学生有充分的时间理解和思考所学知识,又可以根据学生的反应灵活调整授课内容,更好地和学生进行交流。
  2.2采用“案例教学法”
  对于指针这种抽象难懂的概念,如果只是一味地让老师讲学生听,学生处于被动的学习状态,效果是事倍功半的。要改变这种状况就要采用“案例教学法”。老师课前应该根据指针的特点及易出现的错误,设计好案例,上课时和学生一同分析案例,让学生动脑筋进行思考,根据分析结果让学生自己设计解决该案例的程序代码,之后老师在根据学生设计的程序进行分析讲解。这样既充分发挥了学生的主观能动性,使学生独立思考,又能理论联系实际,让学生更灵活地掌握所学知识,提高学习效率。
  2.3加强上机实践的力度
  C语言的学习过程中,上机操作是必不可少的,只有通过不断的上要摸索,才能灵活运用,激发学习兴趣,更好地掌握和运用指针。
  3结束语
  C语言的指针使用灵活、执行效率高。如果能够熟练掌握可以利用它编写出执行效率较高的程序,实现其他高级语言难以实现的功能。但对初学者而言,指针往往令人望而生畏,难以掌握。所以,教师一定要针对指针中的常见错误精心设计教学过程,选择学生感兴趣的案例,激发他们的学习热情,这样才能提高学生的编程能力。
  参考文献:
  [1]谭浩强.C语言程序设计教程[M].2版.北京:清华大学出版社,2001.
  [2]全国计算机等级考试二级教程——C语言程序设计[M].北京:高等教育出版社,2003.
  [3]阳小兰,钱程.C语言指针解析[J].软件导刊,2006.
  [4]李素萍.C语言指针的应用[J].中国科技信息,2005,(21).
  [5]叶枫.C语言中常见错误的探析[J].自动化技术与应用,2008.
  [6]吴亚明.C语言中指针用法解析[J].绥化学院学报,2010(5).

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3