本人新手,有错误请多多指点!
#include <stdio.h>
#include <stdlib.h>
struct Student{ //创建一个结构体,结构体中定义两个int类型的成员
int age;
int score;
};
typedef struct Student student;//给结构体起别名
typedef int (*ComparePtr_t)(student *s1,student *s2);//定义一个函数指针,并且给函数指针起别名
int compareAge(student *s1,student *s2)//定义外部函数,实现其功能
{
return (s1->age)-(s2->age);
}
int compareScore(student *s1,student *s2)
{
return (s1->score)-(s2->score);
}
void Bust(student *array,int number_of_elements,ComparePtr_t comparefunc)//算法
{
int iter,swapped;
student temp;
do{
swapped=0;
for (iter=1; iter<number_of_elements; iter++) {
if (comparefunc(&array[iter-1],&array[iter])<0) {
temp=array[iter-1];
array[iter-1]=array[iter];
array[iter]=temp;
swapped=1;
}
}
}while (swapped);
}
int main(int argc, const char * argv[]) {
student array[5]={{5,1},{3,8},{7,2},{6,4},{2,3}};
Bust(array,5, compareAge);
for (int iter=0; iter<5; iter++) {
printf("age:%d score:%d\n",array[iter].age,array[iter].score);
}
printf("\n");
return 0;
}
下面说说函数指针的作用:实现同一功能的多个模块统一起来标识,这样一来更容易后期的维护,系统结构更加清晰。
其运算结果为:
age:7 score:2
age:6 score:4
age:5 score:1
age:3 score:8
age:2 score:3
原文:http://www.cnblogs.com/tpj710/p/4369509.html