函式指標

─────────────分隔線───────────────

/*main.c*/
#include
#include "stdlib.h"
#include "sort.h"

int main(void) {
int number1[] = {3, 5, 1, 6, 9};
sort(number1, 5, larger);
printf("大的在前 ");
int i;
for(i = 0; i < 5; i++) {
printf("%d ", number1[i]);
}
putchar('\n');

int number2[] = {3, 5, 1, 6, 9};
sort(number2, 5, smaller);
printf("小的在前 ");
for(i = 0; i < 5; i++) {
printf("%d ", number2[i]);
}
putchar('\n');
system("pause");
return 0;
}

─────────────分隔線───────────────

/*sort.h*/
void swap(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}

int larger(int a, int b) {
return a > b;
}

int smaller(int a, int b) {
return a < b;
}

void sort(int* arr, int length, int (*compare)(int, int)) {
int flag = 1;
int i, j;
for(i = 0; i < length-1 && flag == 1; i++) {
flag = 0;
for(j = 0; j < length-i-1; j++) {
if(compare(arr[j+1], arr[j])) {
swap(arr + j + 1, arr + j);
flag = 1;
}
}
}
}


─────────────分隔線───────────────

sort.h 裡面的 compare 是一個指標

可以接受 main.c 呼叫他的時候給予不同的名稱,如 larger 或者 smaller

感覺就像是一個 char 指標指向不同的記憶體區塊,而獲得不同的內容

也就是說

sort(number1 , 5 , larger)
同於
sort(int* arr, int length, int larger(int, int))

沒有留言: