请问高手这个函数中的if((*compare)(score[j],score[k])) 是什么意思
/*函数功能:交换法实现按成绩升序或降序排序,并实现姓名及学号随学号调整*//*函数参数:学生人数,分数,姓名,学号*//*函数返回值:无*/voidSelectionS...
/*函数功能:交换法实现按成绩升序或降序排序,并实现姓名及学号随学号调整*/
/*函数参数:学生人数,分数,姓名,学号*/
/*函数返回值:无*/
void SelectionSort(int(*compare)(int a,int b),int score[],char name[][MAX_LEN],long num[],int n)
{
int i,j,k,temp;
long temp2;
char temp3[MAX_LEN];
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if((*compare)(score[j],score[k]))
{
k=j;
}
}
if (k!=i)
{
temp=score[k];score[k]=score[i];score[i]=temp;
temp2=num[k];num[k]=num[i];num[i]=temp2;
strcpy(temp3,name[k]);
strcpy(name[k],name[i]);
strcpy(name[i],temp3);
}
}
}
他是怎么起到比较作用的? 展开
/*函数参数:学生人数,分数,姓名,学号*/
/*函数返回值:无*/
void SelectionSort(int(*compare)(int a,int b),int score[],char name[][MAX_LEN],long num[],int n)
{
int i,j,k,temp;
long temp2;
char temp3[MAX_LEN];
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if((*compare)(score[j],score[k]))
{
k=j;
}
}
if (k!=i)
{
temp=score[k];score[k]=score[i];score[i]=temp;
temp2=num[k];num[k]=num[i];num[i]=temp2;
strcpy(temp3,name[k]);
strcpy(name[k],name[i]);
strcpy(name[i],temp3);
}
}
}
他是怎么起到比较作用的? 展开
展开全部
其实这个compare是一个外部输入的函数指针。
compare本身是一个指针,其指向某一个函数的首地址,将compare作为参数传递进当前的函数中,就可以直接调用指向的那个函数了。这样做的话,比较两个分数的方式就可以多种多样,自己选择即可。不过那个函数的参数必须是(int a,int b)这样的两个整形。
compare本身是一个指针,其指向某一个函数的首地址,将compare作为参数传递进当前的函数中,就可以直接调用指向的那个函数了。这样做的话,比较两个分数的方式就可以多种多样,自己选择即可。不过那个函数的参数必须是(int a,int b)这样的两个整形。
更多追问追答
追问
if括号里并没有出现任何判断条件呀?为什么根据这一个指针就可以做出判断呢?
追答
compare指向的函数的返回值就是if的判断内容,其实这个函数现在还没定义,所以你觉得很奇怪。你可以这样理解:我是组装汽车的,这发动机怎么运作我不管,我只看,如果这发动机转了,就是返回1,如果不转,就是返回0,无论发动机装没装上、什么牌子我都是这么判断。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询