这个函数正在调整哈希表的大小,我的问题是,在我的调整大小函数搞乱了临时表之后,我在调整大小函数的末尾设置了 table=temptable,而它在函数内具有正确的地址。 ..但是一旦我们回到主函数,表指针就永远不会更新。我知道这可以通过引用传递来解决。
但是,我根本不允许更改 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);
}
最佳答案
被调用的函数不能直接更改其参数。它传递信息的唯一方法是返回某些内容(这样您就可以使 resize_hash 返回可修改的值,这可能是最好的解决方案)或修改它所指向的内容。您无法修改指针表,因为 resize_hash 没有指向指针表的指针,但您可以修改指针表指向的哈希表。特别是,您可以重新分配原始哈希表的 hash_entrys,然后相应地更改结构中的指针和大小。
关于更改函数内的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27307302/