admin 管理员组文章数量: 887021
2023年12月17日发(作者:查看log4j版本)
维普资讯
214 福建 电脑 2006年第5期 C 语言指针教学的探讨 詹科 (囊樊学院电气信息工程系湖北襄奘441053) 【摘要 】:本文分析了在C语言指针学习中存在的难点。主要通过不规范使用指针的反例来强调正确使用指针的重要 性。 【关键诃】:C语言;指针;内存地址 1.引盲 . 从这个结果可以看出.函数代码调用后。并没有实现数据的 在C语言的指针学习中。强调的是指针变量在使用之前不 交换功能 也就是我们通常所说的.出现了非预期的运行结果。 仅要先进行声明.而且要使这个指针变量指向确定的内存单元。 为什么会出现这种结果呢?分析源代码我们会发现,这个程序违 即将一个地址值赋给这个变量。例如: 反了上面总结的第三条.即作为中间变量的P是一个指针变量, 、 lint ai*p;, 而且在使用之前没有将一个地址值赋给指针变量p,也就是在 ’. & 。 、 没有使指针指向一个确定的内存单元就使用了它.从而不能正 但是.,l直H果在使用 食指针变量l之前 1只是进行了声明,没 常实现数据的交换。(至于为什么这个结果是a 9,b ̄9。下面再分 有将一个地址值赋给这个指l钟 也就是这个指针没有指向一个 析。)依据这个思路。只要在函数体再声明一个变量X,并且使P 确定的内存单元。会是什么结果呢?通常我们说会产生一个不可 指向X。即: 预期的结果。而在这部分内容的教学中。我们一般会给学生举出 程序(3): 具体的程序来说明如何注意在指针使用过程中应该注意的细 swap(int p1.int p2】 ’节 但_不正确的使用究竟会有哪些可能韵情况出现呢?本文就通 .(inl p; , : :. 。 过这些反例.来说明不规范使用指针给程序设计带来的麻烦。 int x; .p=&x; 2.分析 --一 lll… .,。 p暑 pl; ’在说明这个问题时.所使用的例子是 在‘主程序输入两个待 pl= p2; 处理的数据。在函数中交换数据。并在主程序中显示交换后的结 ’ = 果。先分析正确的例子: -. J 程序(1》1. 。… . . : . 重复同样的输入,则结果是’:a-9,b=5。能实现数据的交换功 sv ̄ap(inl‘p1.int’p2】 一 。 。。 能,就是因为在使用 之前,是使p指向了一/个_确定的内存单 元。 。。 。’ {int p; p=.pl; 上面的程序是将交换功能通过函数调用实现的.如果将实 ‘pl=‘p2; 现交换功能的语句写在同一个主函数中。会出现什么结果呢?分 p2_-- ̄;r ’’ ‘ 析如下的程序: ’ J main(、 程序(4): {’。i nt 。 。。 ~ ,-- rrmin  ̄) . … : m r-I.’lioidte0; . ..-_l_ 。 ‘’ ‘ .t- : sc4n “%d.chxt',,&且'&bk 、 ’p' 1. : . ’ . ,polnter_l=&a;polnter 2=&b; if(n<b)swap(tx)inler_l,pointer_2); scanf("%d,钏”,&n cb). . ,prinff(”、rI8 d。b--:%dW‘,且’b): pl-&a ̄ ’, ? ’ ’p2=&b; 【 _如果在程序运行时,输入_5’l9。。即a-'5,b=91则最终程序运行 p=Ppl;… : … 结果是: ’ . 。 ’pl= p2; .’p2=’p: a=9。b=5 … --- 。 ‘prinff(” %dlb=%d “.a:b1 ’ :。 这个程序之所以能正常实现数据妁交换功能. 主要在于以 J _I. ’ ‘ 下三点: 。 . - .. 运行结果是: 9,b=5。 (1)实参是指针变蕾’ r 。 这个程序只是将上述函数体的语句写在主程序中。其他的 (2).形参是指针变量 一 r -一 没有变化。、而且程序中:的错误也是与程序‘2) 梯。 但是这个程 (3)在函数I申作为中饲变量的 是整型数据,.即是一个普 序运行的结果是正确的:即能正常的实现数据空换的功能。- 通变I .r”一 。J 一 l__ 为干r么是这个结果呢?如果在每个程序I中再加入一条】prinff 下面来修改这个程序。修改后: ‘ 语句,将名.个指针变量 值打印出来,政动耀序<2)后如下: ll_程序(2’): :. 。 _l¨ 。: _程序(5): -- 一 , swap(int’p1.inl’p2) swap(int pl,inl’p2). ・ ’l int’p; - l II1t . 一p pl; prln “p=%p’pl=%p。p2=%p”.p.p1.p2): ‘pl=*p2; ‘p +pl; 。 *p2=-’p; ’pl p2; 。: p2 p; ’ 主函数不变。 . 。l 如果在程序运行时输入5,9 即给 赋值5,b赋值9。则运 结粟箍:‘ - 。 ^。。 行结果: .p=FFCE,pl=F ̄’CE,p2=FFD0 . ,、 … a=9-b-9。 。 a=9,b=9 , 关键是要注意函数体中的。)rinff语句,因为(下转第193页)
维普资讯
2006年第5期 福建 电脑 193 加了一个求和公式SUM(C3:C27),来控制该列需要添置的1的 最后根据图l图2和圈4即可得出最后的监考安排表.包 数目,即所对应科目的监考人员数。 括考试时问,考试地点击监考人员。 ∞∞日H ^地 土生 旺I 止业置 H勰 目 日 t*I }薯管 圈鼯 0 女 1 4 l● f. 4.结语 1 本文充分利用了EXCEL的特点.利用表格形式很直观的得 } I。_ 到一些很重要的信息。通过专业与课程对应衷得到每门’蝶程的 嘲勰 一 考生数.然后根据课程与教室对应表得到每门课程可以安排的 l 教室,最后得到监考人员与科目对应表.把这几个表进行复合即 可得到最终的安排表。此方法最大的优点就是利用公式来控制 I_ 特殊监考人员的监考科目和场次.利用此方法能够快速得到冲 箱器 突最少,最优的监考表。 一 g 参考文献: 一 1.谢柏青.等Excel应用教程高等教育出版社2000—6 图3:监考人员与科目对应表 2.侯紫罗.等Excel在公司管理中的应用中国青年出版社2002—6 余下的工作即是随意的编排监考人员.要求是B列的值不 3.唐五湘Excel在统计中的应用电子工业出版社2002—1 超过5(根据上面的计算得出),第28行的值与第2行的值相 等。即可得出图4: 龉强髓粥疆魈 & 日日麟 日日日鼢 ★ ●t+ 里瑾 & H 皿 高竹¨★掣转口 ‘ 5 镕普 』 5 蔫 55h 5 5 i船 5 ...L 》# _L5E E 5 5 5 h S l l l3 图4:最后的教师和考试科目表 (上接第214页) 这条prlnff语句告诉我们P和pl指向了相同的内存单元.从而 而这个单元就是属于这个函数内存块的首个单元。所以P和p1 使得最终的结果是:a和b的值都是9。 就指向了相同的内存单元。 程序(6): 对于程序(6)。所有的功能都是在同一个主程序中完成的。 main0 编译程序会为这个程序块分配内存空问.而这个空间的首地址 I 就是O。所以当声明一个指针变量没有进行赋值时。它所指向的 _nl p' pl, p2; int a.b: 不确定单元仍然是这个内存块的首地址。 scanf(“%d,%d”.&a.&b】; 这只是对上述程序的~种分析。当程序语句不同时.末指向 pl-- ̄a; 确定单元的指针不一定总是指向首单元。总之,如果出现了只声 p2-- ̄b; prlnff(”p嘲p,pl--%p,p2=%p\n“,p,pl,p2); 明、没有赋值的指针。这个指针会指向一个不确定的内存单元, p=.p1: 至于这个不确定的内存单元究竟是哪个单元就要依据情况T疗i定 pl= p2; 了。 p2-- p; prinff(“8=%d.b=%dW’一.b); 这也就是为什么程序(5)和程序(6)都是犯了同样的错误, l 但得出的结果却不同的原因。 运行时输入9.5。结果是: 通过上面的分析.可以更加明确指针变量的使用。因为通常 p=0000,pI=FFCE,p2--FFDO 在使用变量时要进行声明,而对于指针变量,不但要正确声明. a=9,b=5 Null pointer ̄signment 还要进行赋值。使其指向确定的内存单元.否则就会出现非预期 从添加的prinff语句的执行结果可以确定指针p,p1.p2指 的结果。上述程序就说明了这一点。上述程序(6)结果虽然是正 向了不同的内存单元,所以可以进行交换。结合上述的分析。再 确的.但也应该在使用指针的过程中避免出现类似的情况。 从运行结果给出的提示信息,会发现这个程序也是存在问题的。 3.结束语 就是在使用P指针之前没有使其指向确定的内存单元。 在C语言的教学中.一般我们都要给学生强调如何正确的 现在的问题就是程序(5)NN序(6)都是使用了没有指向确 使用指针以达到安全使用的日的.教材中一般会提到避免不规 定内存单元的指针变量. 范的使用.而一旦程序中出现了不规范的使用指针的情形。会出 即这两个程序都犯了同样的错误。但是结果却不一致。分析如 现什么情况?这是学生感到比较茫然的问题。本文就是通过反例 下: 的错误结果.使学生更加深刻理解正确使脂指针的重要性。 对于程序(5),使用的是函数调用,在程序编译时,编译程序 会重新开辟一块内存单元用来存放函数的变量。而形参p1接收 参考文献: 实参传递过来的地址就是FFCE.当在函数体中声明了新的变量 1.潭浩强c程序设计 清华大学出版社 后。因为没有对其进行赋值,就指向了一个不确定的内存单元, 2.奉友淑甘化工C语言程序设计教程 华中科技大学
版权声明:本文标题:C语言指针教学的探讨 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1702758353h429641.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论