- 1、本文档共21页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
对C语言指针教学问题的探究.
对C语言指针教学问题的探究
摘要:本文讨论了C语言中指针的各种应用形式,认真分析了指针在数组、函数和动态内存分配等方面应用的特点和优点,对如何学好和掌握C语言的指针有十分重要的指导意义。br 关键词:指针;指针变量;数组;函数;动态内存分配br 中图分类号:G642 文献标识码:Abr br 1引言br br 指针是C语言中一种特殊的数据类型,运用指针编程是C语言最主要的风格之一。利用指针变量可以访问各种类型的数据;能动态地分配内存空间;能很方便地使用数组和字符串;并能像汇编语言一样处理内存地址,编出精练而高效的程序。但是,大部分学生对指针的理解和应用还是感到困惑,特别是什么场合用到什么类型的指针变量,应用指针变量应注意哪些问题等。本文对指针应用中的一些问题进行了梳理,以利于学生掌握指针的应用。br br 2数组中指针的应用br br 2.1使用指针引用数组元素的优点br 对数组元素既可以用下标a[i]的方式引用,也可以用指针变量*p的方式引用。应该说,下标方式能对数组进行随机访问,指针变量却做不到这一点。但是,引入指针的主要目的是为了提高对数组元素访问的速度。br 在C语言中,数组中每一维下标的下界定义为0。对一维数组,设a[i]的存储地址为Loc(a[i]),每个数据元素占d个存储地址,则第i个数据元素的地址为br Loc(a[i])=Loc(a[0])+i*d (1)br 对二维数组a[m][n],a[m][n]的存储地址是:br Loc(a[i][j])=Loc(a[0][0]) + ( i*n + j ) * d (2)br 实际上,对数组元素的引用,都要先计算数组元素的地址,才能对指定单元进行操作。显然,一维数组中的地址要进行1次乘法和1次加法运算;二维数组中的地址则要进行2次乘法和2次加法运算。如果用指针变量p指向数组,连续对数组元素进行引用,可用p++和p--来移动指针。每次的引用地址只须进行简单的加法运算,引用数组元素的速度比使用数组下标要快得多。表1是在IBM-R40上使用下标和指针两种不同方式对10000个元素进行10000次访问的时间比较。br 从测试结果看,随着数组维数的增加,使用指针方式访问数组的速度基本不变,但下标方式的访问速度明显减慢。br 2.2动态数组的应用br 在C语言中,数组一般都是静态的。数组已经定义,所占用的内存空间就一直被占用,直到该函数退出时为br br 止。但如果使用指针变量,就可以实现需要时给数组分配内存,不需要时释放内存,可节约大量的内存空间。下面的程序就是使用了指针变量,使用动态数组的一个例子。br br typedef structbr {int a[MAXSIZE];br } A;br main()br {int i;br A *p;br p=(A *)malloc(sizeof(A));/*动态分配内存*/br …………br free(p);/*释放内存*/br }br br 3函数参数中指针的应用br br 在C语言中,函数的形参是局部变量。实参和形参变量间的传递是值传递,即将实参的值传递给形参变量。形参在函数中如何变化,并不改变实参的值,我们称之为单向传递。这种参数的单向传递减少了函数之间的耦合性,增加了其内聚性,有利于结构化编程。但是,如果调用函数想从被调函数中得到一个以上的返回值,就比较困难。当然,通过全局变量也能实现,但过多的使用全局变量又增加了函数之间的耦合性,不利于结构化编程。如果实参和形参都使用指针变量,就可达到此目的。下面的程序就是使用指针变量实现两个变量值交换的例子。br br int swap(int *p1,int *p2)br {int temp;br temp=*p1;br *p1=*p2; br *p2=temp;br }br main()br { br int a,b;br int *pointer_1,*pointer_2;br scanf(%d,%d,a,b);br pointer_1=a;pointer_2=b;br if(ab) swap(pointer_1,pointer_2);br printf(\n%d,%d\n,a,b);br }br br 需要说明的是:br (1) 实参和形参之间传递的仍然是值,但该值不是变量的值,而是变量的地址,如图1所示。此时,实参和形参都指向了同一变量,对形参变量所指变量值的改变也必然改变实参变量的值,如图2所示。br br (2) 但在被调函数中不能改变形参指针变量的指向,否则实参变量和形参变量各指向
您可能关注的文档
- 对数与对数运算说课稿..doc
- 对拟阵的初步研究..doc
- 对我国现行劳动争议处理制度的探讨毕业论文..docx
- 对数函数图象与性质导学案..doc
- 对整体系数的影响的分析..doc
- 对数的运算性质教学设计..doc
- 对文科研究生入学考试的感想和建议2..doc
- 对新媒介环境下“粗俗文化”的考察..doc
- 对新形势下小学语文教学评估现状分析及对策探讨(修改版)..doc
- 对新形势下税收宣传工作的几点思考..doc
- 2020年智慧树知道网课《公司财务—告别财务小白,开启财智人生》课后章节测试满分答案.pdf
- 2020上半年江西应用技术职业学院招聘考试《综合基础知识(教育类)》试题.pdf
- 2020-2021学年天津市红桥区人教精通版五年级下册期末测试英语试卷(含听力音频).pdf
- 2020-2021学年合肥第二十八中学高三生物上学期期末试题及答案.pdf
- 2021-2022学年山东省菏泽市高二上学期期末检测 英语 试题(含答案).pdf
- 2021-2022学年山东省潍坊市【导游资格】政策与法律法规模拟考试(含答案).pdf
- 冠心病的定义与病因.pptx
- 2021-2022学年山东省枣庄市薛城区青岛版五年级下册期中测试数学试卷.pdf
- 2023年消防设施操作员之消防设备高级技能模拟考试试卷A卷含答案.pdf
- 第23讲糖类(课件)高一化学讲义(人教版2019).pptx
文档评论(0)