2016-05-03 18 views
-1

私は関数の数がいくつかあり、すべての関数は配列からすべての負の数を並べ替えるようなやり方をとっています。Cの引数の関数ポインタ

また私はそれの配列、大きさ及びintを受け取り、問題がint(関数ポインタ)である関数の名前に3つの引数ポインタと機能displayを作成しなければなりません。私はこれをやろうとしますが、これはうまくいかず、関数ポインタを使ってこのエクササイズを正しく行うために何をすべきか分かりません。なぜなら、私はそれを理解していないからです。

これはあなたの意図が明確でないので、それはあなたの意図と異なる場合があります私のコード

int main (int argc, char **argv) 
{ 
    srand (time (NULL)); 
    int arr[MAX_SIZE], second_arr[MAX_SIZE], i; 

    random_arr (arr); 

    display (arr, 20, negative_number (arr, second_arr)); 

    system ("PAUSE"); 
    return 0; 
} 

void random_arr (int *my_arr) 
{ 
    int i; 
    for (i = 0; i < MAX_SIZE; i++) { 
     *(my_arr + i) = i - 10; 
    } 
} 

int negative_number (int *arr, int *sort_arr) 
{ 
    int i; 
    for (i = 0; i < 20; i++) { 
     if (arr[i] < 0) { 
      sort_arr[i] = arr[i]; 
     } 
    } 

    return sort_arr; 
} 

void diplay (int *arr, int size, int (*a_function) (int, int)) 
{ 
    int i = 0; 
    for (i = 0; i < size; i++) { 
     printf ("%d\n", a_function); 
    } 
} 
+0

a_function表示中()関数が呼び出されると、関数ポインタで始まるし、*表記を使用して呼び出す必要がありますされているときに、2つのパラメータを持っている必要があります。だと思います – ad3angel1s

+1

また、display()関数を呼び出すときは、引数なしで関数ポインタを渡すだけで済みます。私はあなたがそのような行為を解決しようとする前に、関数ポインタの構文をより深く理解する必要があると思う。 – ad3angel1s

+6

"関数のポインタは*表記を使って呼び出さなければならない。 –

答えて

0

です。 私はこの参考になる

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

#define MAX_SIZE 20 

void random_arr (int size, int *my_arr); 
int negative_number (int size, int *arr, int *sort_arr); 
void display (int *arr, int size, int (*filter_function) (int in_size, int *in_array, int *out_array)); 

int main (void){ 
    int arr[MAX_SIZE], second_arr[MAX_SIZE], i; 

    srand(time(NULL)); 
    random_arr(MAX_SIZE, arr); 

    for(i = 0; i < MAX_SIZE; ++i) 
     printf("%d ", arr[i]); 
    puts(""); 
    display (arr, MAX_SIZE, negative_number); 

    system ("PAUSE"); 
    return 0; 
} 

void random_arr (int size, int *my_arr){ 
    int i; 
    for (i = 0; i < size; i++) { 
     my_arr[i] = rand()%MAX_SIZE - MAX_SIZE/2; 
    } 
} 

int negative_number (int size, int *arr, int *sort_arr){ 
    int i, j = 0; 
    for (i = 0; i < size; i++) { 
     if (arr[i] < 0) { 
      sort_arr[j++] = arr[i]; 
     } 
    } 
    return j;//new array size 
} 

void display (int *arr, int size, int (*filter)(int in_size, int *in_array, int *out_array)){ 
    int i = 0; 
    int *out = malloc(size * sizeof(*out)); 
    int out_size = filter(size, arr, out); 

    for (i = 0; i < out_size; i++) { 
     printf ("%d\n", out[i]); 
    } 
    free(out); 
}