首页 理论教育 C语言程序设计:使用指针作为函数参数指向数组元素

C语言程序设计:使用指针作为函数参数指向数组元素

时间:2023-11-23 理论教育 版权反馈
【摘要】:通过前边的数组的学习我们知道,数组名作为函数的参数时,并不是把数组中的全部数据元素传给了形参数组,而仅仅是将数组名字arr的值传给了实参x。用指针作为形参完成数据的升序排列。事实上不仅可以用指针作为形参来接收数组的地址,也可以用指针作为实参向形参传递数组的地址,但是需要注意的是,一定要搞清楚实参指针代表的是数组中哪一个单元的地址。由此可见,用数组名作为函数参数的实质就是用指针来作为函数的参数。

C语言程序设计:使用指针作为函数参数指向数组元素

学习数组一项目时知道,数组名可以作为函数的参数。请看例7-8。

【例7-8】数组名作函数参数完成数据的升序排列。

这是学习数组一项目时我们学习过的一个例子,这里只是将sort函数中的排序方法换成了选择排序。通过前边的数组的学习我们知道,数组名作为函数的参数时,并不是把数组中的全部数据元素传给了形参数组,而仅仅是将数组名字arr的值传给了实参x。学习完指针后我们知道数组名字arr是数组的首地址,因此main函数传给形参x的也仅仅是一个首地址,而x作为能保存地址的变量,本质上就是一个指针。从这个意义上说,x的定义完全可以改成指针的形式。

【例7-9】用指针作为形参完成数据的升序排列。

这里我们仅仅是将sort函数形参改成了int*x,其他的完全没有改动,但程序得到的排序结果是一致的。这说明用数组名或者指针变量作为函数的参数是等效的。由于形参数组名本质上就是一个指针(不用管它的定义形式),因此在参数传递过程中实质上只是完成了一个“地址值”的传递而不是将实参数组中的所有值传递给被调函数,这样就节省了系统传递参数的时间。而且由于不需要传递数组中的数据,因此形参也不用开辟额外的空间来保存数据,从而节省了内存的使用。也正是如此,在使用数组名或指针作为函数的形参时,一般我们需要第二个参数int n;用变量n来接收我们需要在被调函数中处理的数据的个数。(www.xing528.com)

事实上不仅可以用指针作为形参来接收数组的地址,也可以用指针作为实参向形参传递数组的地址,但是需要注意的是,一定要搞清楚实参指针代表的是数组中哪一个单元的地址。

【例7-10】用指针作为实参完成数据的排序。

由于此例中传给被调函数的是&arr[3]和5,因此被调函数只是从x地址开始对后边的5个数进行了排序,反映到arr数组中,对应的是arr[3]~arr[7]单元进行了排序,而其他的单元没有变化。当然,如果将数组首地址arr赋给指针p(p=arr),并将函数调用改成sort(p,10),此程序仍对数组arr中的10个值完全排序,结果同例7-9一样,请同学们自己验证并思考。

由此可见,用数组名作为函数参数的实质就是用指针来作为函数的参数。因此在使用时实参、形参均可以是数组名或指针,其效果是等价的,只是在用指针作为实参传递地址时,一定要注意传递的是哪一个单元的地址。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈