C 更改函数内的指针
这个函数正在调整哈希表的大小,我的问题是,在我的resize函数处理完诱惑后,我在resize函数的末尾设置table=诱惑,而它在函数中的地址是正确的。。。但是一旦我们回到主函数,表指针就再也没有更新过。我知道这可以通过参考传递来解决 但是,我不允许在main中更改任何内容,包括如何调用resize。Im也不允许更改resize_哈希函数参数。im允许更改的只是函数中的内容 哈希表的结构:C 更改函数内的指针,c,function,pointers,data-structures,hash,C,Function,Pointers,Data Structures,Hash,这个函数正在调整哈希表的大小,我的问题是,在我的resize函数处理完诱惑后,我在resize函数的末尾设置table=诱惑,而它在函数中的地址是正确的。。。但是一旦我们回到主函数,表指针就再也没有更新过。我知道这可以通过参考传递来解决 但是,我不允许在main中更改任何内容,包括如何调用resize。Im也不允许更改resize_哈希函数参数。im允许更改的只是函数中的内容 哈希表的结构: typedef struct hash_table_ { int size; hash_
typedef struct hash_table_ {
int size;
hash_entrys **buckets;
void (*print_func)(void *);
} hash_table, *Phash_table;
从main调用resize函数:
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);
}
void resize_散列(Phash_表,int size){
int h=0;
Phash_表诱人;
散列项*头项,*当前项;
诱惑=新的散列(大小、表格->打印函数);
for(h=0;hsize;h++){
水头=工作台->铲斗[h];
if(head_re!=NULL){
for(cur\u re=head\u re;cur\u re!=NULL;cur\u re=cur\u re->next){
插入散列(诱惑,cur\u re->key,cur\u re->data);
}
}
}
表=诱人;
自由的(诱人的);
}
被调用函数不能直接更改其参数。它传递信息的唯一方法是通过返回某些内容(因此您可以使resize_hash return变得诱人,这可能是最好的解决方案)或修改其指针指向的内容。无法修改指针表,因为resize_hash没有指向指针表的指针,但可以修改指针表指向的哈希表。特别是,您可以重新定位原始哈希表的hash_入口,然后相应地更改结构中的指针和大小