2015-05-16 2 views
2

Я не смог сделать динамический массив указателей на функции, у меня возникли проблемы с пониманием того, как работать с динамическим массивом указателей на функции при указателе на указатель func_cmp.Как создать динамический массив указателей на функции?

int(*func_cmp[])(void *,void*); 

numElements++; 
func_cmp=(func_cmp*)realloc(func_cmp, numElements*sizeof(func_cmp*)); 
func_cmp[numElements-1]=*func_cmp; 

Я не уверен относительно линии realloc.

+0

Что ваш вопрос? – Dave

+0

Что не так в линии realloc? что мне нужно, чтобы он работал? –

+0

Я не думаю, что вы можете создать массив функций; вы можете создать массив _функций указателей_. – szczurcio

ответ

5

чистейшей способ заключается в использовании typedef

#include <stdlib.h> 

typedef int (*functype)(void *a, void *); 

functype funcs[100]; // static array           

functype *moreFuncs; 

int main() { 
    int capicity = 16; // initial capacity 
    int n = 0;   // initial size 
    moreFuncs = malloc(capacity*sizeof(functype)); // heap dynamic array 

    // ... 

    // adding element and need more space 
    if (n >= capacity) { 
    capacity *= 2; 
    moreFuncs = realloc(moreFuncs, capacity); 
    moreFuncs[n++] = <address of new function>; 
    } 
} 
+0

Не полезно, если я выделяю memmory, я не буду использовать, вот почему я пытаюсь использовать realloc! –

+0

@ user2943683 это прекрасно - используйте 'malloc', чтобы выделить исходный массив и изменить размер с помощью' realloc' по мере необходимости. – wcochran

+0

@ user2943683 Что вы пытаетесь сделать, точно? Если у вас есть динамически выделенный блок памяти, размер которого вы хотите изменить, назовите его как «malloc» выше + указатель на эту память в качестве первого аргумента. – szczurcio

Смежные вопросы