函数指针在C中的参数中

时间:2016-05-03 23:20:30

标签: c arrays pointers

我必须做一个练习,其中我有一定数量的函数,每个函数都做不同的事情,比如对数组中的所有负数进行排序。

此外,我必须创建一个函数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);
    }
}

1 个答案:

答案 0 :(得分: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);
}