2014-10-07 5 views
1

Эй, я пытаюсь выяснить, как я передаю указатель на функцию, хранящуюся в структуре. Ниже приведено typedefКак передать указатель на функцию.

struct menu_item 
{ 
    char name[ITEM_NAME_LEN+1]; 
    BOOLEAN (*func)(struct vm*); 

}; 

Функция, которую я пытаюсь передать, имеет следующий прототип.

void print_list(struct vm_node *root); 

с Defintion файла, который:

void print_list(struct vm_node *root) { 
    while (root) { 
     printf("%s",root->data->id); 
     root = root->next; 
    } 
    printf("\n"); 
} 

ответ

1
struct menu_item item; 
item.func = &print_list; 

Как просто. Однако BOOLEAN (*func)(struct vm*); необходимо изменить на void (*func)(struct vm_node *); для соответствия функции назначения.

+1

Адрес оператора не требуется в '& print_list'. 'print_list' распадается на указатель функции, аналогичный тому, как массив распадается на указатель. – tangrs

+0

@krypton func должен будет принимать различные другие функции, которые возвращают другие типы. –

+0

@tangrs: с амперсандом - более правильный способ понимания. – Krypton

0

функции вроде как массивы, так что вы можете просто сделать

menu_item.func = print_list; 

так же, как вы могли бы сделать с массивом

int arr[20]; 
int *ptr; 
ptr = array /* 
+1

Знаете ли вы, что делает эта линия? – Krypton

+0

OP требует указателя функции, насколько я могу видеть, а не результата вызова функции. – tangrs

+0

Я не спускал с борта btw – Krypton