用指针法对10个整数排序
思路:在主函数中定义数组a存放十个整数,定义int*型变量p并指向a[0]。在主函数中调用sort函数,用指针变量p作为实参。sort函数的形参用数组名。利用选择排序法进行排序。
#include<stdio.h>
int main()
{
void sort(int x[],int n);
int i,*p,a[10];
p=a; //指针变量P指向a[0]
printf("输入十个数:");
for(i=0;i<10;i++)
scanf("%d",p++);
p=a; //指针变量P重新指向a[0] 用指针变量作实参,必须先指向一个对象
sort(p,10);
for(p=a,i=0;i<10;i++)
{
printf("%3d",*p);
p++;
}
return 0;
}
void sort(int x[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++) //选择排序法
{
k=i;
for(j=1+i;j<n;j++)
if(x[j]>x[k])
k=j;
if(k!=i)
{
t=x[i];
x[i]=x[k];
x[k]=t;
}
}
}
形参p为指针变量,指向a[0]。形参为数组名x,编译系统把x作为指针变量处理,将a[0]的地址传给形参x,使x也指向a[0]。
sort函数改用指针变量作形参,程序照样可以执行。
此时sort函数首部为 sort(int*x,int n)
void sort (int *x,int n)
{
int i,j,k,t;
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(*(x+j)>*(x+k))
k=j;
if(k!=i)
{
t=*(x+i);
*(x+i)=*(x+k);
*(x+k)=t;
}
}
}
两种sort函数只是形式上的不同,实际上形参都是使用指针变量。
还没有评论,来说两句吧...