C语言教学中指针作函数参数的讨论
C语言是高等院校学生学习计算机编程语言的第一选择,C语言中的指针是它的一大特点,也是教学中的一个难点。本文将就函数调用中指针做函数参数进行讨论,以期对C语言学习者起到有益的帮助。
C语言中的函数调用通常是以函数作为程序的基本组成单位的。一个函数实现一个功能,函数之间通过参数调用和return语句来互相传递消息,但是,我们还可以通过全局变量来实现数据在函数之间的传送。但是,我们“高内聚、低耦合”的程序设计基本原则出发,要尽量限制使用全局变量,只使用函数参数和return语句来实现函数之间的数据交换,以符合“单入口、单出口”的程序设计基本原则。
在函数调用中,有两种形式,即“传值调用”和“引用调用”。“传值调用”是单向的,只能将数据由主调函数(实参)传递给被调函数(形参);而“引用调用”是双向的,主调函数(实参)将变量名传递给被调函数(形参),被调函数中结束调用后,再将形参的值回传给实参,因而被调函数能改变主调函数中的实参的值。C语言中的函数调用严格来说都是传值调用的,任何情况下都只能将主调函数(实参)的值传递给被调函数(形参),那么要想让被调函数改变主调函数中的实参的值,就只能采用地址传递的方法,即在主调函数中用地址(指针)作为参数,将变量的地址传送给被调函数(形参)。
在函数调用中使用指针作为参数可以实现数据的交换。例如,void swap(int *p, int *q) { int temp; temp = *p; *p = *q; *q = temp; },这个函数可以交换两个整数的值。然而,在使用指针作为参数时需要注意指针的类型,例如,void swap(int *p, int *q)和void swap(int &p, int &q)的区别。
通过对五种不同的函数调用情况的分析,我们可以看到,使用指针作为函数参数可以实现数据的交换,但是需要注意指针的类型和使用方法。例如,在swap1函数中,传递的是值的副本,在函数内部,P和q的值确实是交换了,但是它们是局部变量,不会影响到主函数的a和b。当swap1返回时,p和q也就被删除了。所以,从主函数的角度来看,swap1是不能完成a、b的值的交换的。
C语言中的指针是它的一大特点,也是教学中的一个难点。使用指针作为函数参数可以实现数据的交换,但是需要注意指针的类型和使用方法。