这个函数正在调整哈希表的大小,我的问题是在我的resize函数完成后弄乱了temptable,我在我的resize函数结束时设置了table = temptable,而它在函数内部的地址是正确的。 ..但是一旦我们回到main函数,表指针永远不会更新。我明白这可以通过参考传递来解决。
但是,我根本不允许更改main中的任何内容,包括调用resize的方式。我也不允许更改resize_hash函数参数。允许更改的所有内容都是函数内的内容。
哈希表的结构:
typedef struct hash_table_ {
int size;
hash_entrys **buckets;
void (*print_func)(void *);
} hash_table, *Phash_table;
来自main的调整大小函数调用:
resize_hash(table, HASH_SIZE + i*250);
功能代码:
void resize_hash(Phash_table table, int size){
int h=0;
Phash_table temptable;
hash_entrys *head_re, *cur_re;
temptable = new_hash(size,table->print_func);
for(h=0;h<(table->size);h++){
head_re=table->buckets[h];
if(head_re!=NULL){
for(cur_re=head_re;cur_re!=NULL;cur_re=cur_re->next){
insert_hash(temptable,cur_re->key,cur_re->data);
}
}
}
table=temptable;
free(temptable);
}
答案 0 :(得分:1)
被调用函数不能直接更改其参数。它可以传达信息的唯一方法是返回某些东西(所以你可以让resize_hash返回temptable,这可能是最好的解决方案)或者修改它拥有的东西指针。您无法修改指针表,因为resize_hash没有指向指针表的指针,但您可以修改指针表指向的哈希表。特别是,您可以重新分配原始哈希表的hash_entrys,然后相应地更改结构中的指针和大小。