Что-то вроде:
void hash_table_init(Hash_Table *table, size_t entries)
{
size_t i;
table->size = 0;
table->numEntries = entries;
table->bucketPtr = malloc(table->numEntries * sizeof *table->bucketPtr);
for(i = 0; i < table->numEntries; i++)
table->bucketPtr[i] = NULL;
table->mask = 0; /* Not sure how to initialize this. */
}
Я не совсем вижу смысла оставлять начальные корзины в качестве указателей, я, вероятно, просто сделаю
typedef struct {
...
Hash_Entry *buckets;
...
} Hash_Table;
Предполагая, что большинство контейнеров будет фактически использовано, так почему бы их не иметь. :)