/*以“把奇數放到另一個數組”為例*/int is_odd(int number) { return number % 2 == 1;}
然後,編寫主函式:
/*返回符合條件的數的個數*/size_t put_conditional( int * dest, /*目標陣列*/ const int * source, /*原陣列*/ size_t n, /*原陣列所含元素個數*/ int (*filter)(int) /*“過濾器”函式指標,指向的函式當符合某條件時返回非零值,否則返回零*/ ) { int * start = dest; const int * end = source + n; while (source < end) { if ((*filter)(*source)) /*如果符合條件*/ *dest++ = *source; /*那麼就放到dest指向的陣列中*/ source++; } return dest - start;}
呼叫的時候:
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, b[10];size_t i, n;n = put_conditional(b, a, 10, is_odd); /*把a陣列中的奇數放到b陣列中*/for (i = 0; i < n; i++) { printf("%d ", b[i]); /*把a陣列中的奇數打印出來*/}
首先,編寫一個“過濾器”函式:
/*以“把奇數放到另一個數組”為例*/int is_odd(int number) { return number % 2 == 1;}然後,編寫主函式:
/*返回符合條件的數的個數*/size_t put_conditional( int * dest, /*目標陣列*/ const int * source, /*原陣列*/ size_t n, /*原陣列所含元素個數*/ int (*filter)(int) /*“過濾器”函式指標,指向的函式當符合某條件時返回非零值,否則返回零*/ ) { int * start = dest; const int * end = source + n; while (source < end) { if ((*filter)(*source)) /*如果符合條件*/ *dest++ = *source; /*那麼就放到dest指向的陣列中*/ source++; } return dest - start;}呼叫的時候:
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, b[10];size_t i, n;n = put_conditional(b, a, 10, is_odd); /*把a陣列中的奇數放到b陣列中*/for (i = 0; i < n; i++) { printf("%d ", b[i]); /*把a陣列中的奇數打印出來*/}