2015-02-19 3 views
0

Насколько вложенные функции идут, у меня возникают проблемы с пониманием того, что вход и выход для unsigned long int(*hash)(char *); является ... ли это вложенная функция, принимающая в строке и выводит указатель на беззнаковый long int?Уплотненное определение в структурах

Спасибо!

struct hash_table { 
    unsigned long int(*hash)(char *); 
    unsigned int n_buckets; 
    sll **buckets; /* an array of pointers to string lists */ 
}; 

ответ

1
unsigned long int(*hash)(char *); 

является указателем на функцию.

How function pointers work

+0

спасибо. И если бы я захотел разделить этот указатель на кучу, сколько памяти я должен выделить для размещения? –

+1

@ Leeho Lim На всякий случай: вы уверены, что хотите выделить ** указатель **? Я имею в виду, если у вас есть 'struct hash_table variable;', у вас уже есть указатель внутри переменной. Осталось только назначить соответствующий адрес функции этому указателю. –

+0

Ой, понял, как это работает сейчас! Спасибо. –

0

hash член в структуре не является вложенным функция, это указатель на функцию.

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

Вы можете просто инициализировать его с адресом соответствующей функции, которая может выглядеть так:

static unsigned long int my_hash(char *s) 
{ 
    return (unsigned long int) *s; /* Very bad hashing! */ 
} 

Тогда в другом месте:

struct hash_table ht; 
ht.hash = my_hash; 

Обратите внимание, что & (адрес) оператора ISN» t необходимо, так как нет скобок после имени my_hash, имя функции оценивается по ее адресу.

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