2016-05-03 6 views
-1

Мне нужно выполнить упражнение, в котором у меня есть определенное количество функций, и каждая функция выполняет другую функцию, например сортировку всех отрицательных чисел из массива.Указатель функции в аргументе в C

Кроме того, я должен создать функцию display с 3-х аргументов указателей на массив, размер его и имя функции, которая принимает int и что этот вопрос является int (указатель функции). Я пытаюсь это сделать, но это не работает, и я не знаю, что делать, чтобы правильно выполнить это упражнение с помощью указателя на функцию, потому что я этого не понимаю.

Это мой код

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 на дисплее() функция должна иметь два параметра при вызове, и быть указатель функции должен быть вызван с помощью * нотации, чтобы начать с. – 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); 
}