- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言指针教学中常见问题及教法探究
C语言指针教学中常见问题及教法探究摘要:“指针”是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()
{
文档评论(0)