gpt4 book ai didi

更改函数内的指针

转载 作者:行者123 更新时间:2023-11-30 15:26:43 24 4
gpt4 key购买 nike

这个函数正在调整哈希表的大小,我的问题是,在我的调整大小函数搞乱了临时表之后,我在调整大小函数的末尾设置了 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com