指针

例题:输入十个整数,将其中最小的数与第一个数交换,将最大的数一最后一个数交换。
写三个函数:
1.输入十个数
2.进行处理
3.输出十个数
指针
分析:关键在exchange函数。形参num是指针,局部变量max,min ,p都是指针变量,max指向最大值,min指向最小值。
num是第一个数num[0]的地址,执行max=min=num的作用是使max,min指向第一个数num[0].以后使p先后指向第二至十个数。若发现第二个数比第一个数大,就使max指向这个大的数,而min仍指向第一个数。若第二个数比第一个数小,就使min指向这个小的数,而max仍指向第一个数。让后使p移动指向第三个数,以此类推。直到p指向第十个数,并比较完毕为止。
指针
但是,有一个特殊情况要考虑;若原来十个数中第一个数最大,在执行完第一行调换后,最小的数与第一个数交换,最大数就被调到最后面去了。
(注意:数组元素的值改变了,但max和min的指向未改变)
此时如果解析和执行下一行就会出现问题,因为此时max并不指向最大值,而是指向第一个数,结果是将第一个数与最后一个数交换,因此,在两行中间加上
if(max==num)max=min;

采取另一种方法:先找出10个数中最小的数,把他和第一个数交换,再重新找10个数中的最大值,把他和最后一个数交换。
重写void exchange函数如下:指针