Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 更改函数内的指针_C_Function_Pointers_Data Structures_Hash - Fatal编程技术网

C 更改函数内的指针

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_

这个函数正在调整哈希表的大小,我的问题是,在我的resize函数处理完诱惑后,我在resize函数的末尾设置table=诱惑,而它在函数中的地址是正确的。。。但是一旦我们回到主函数,表指针就再也没有更新过。我知道这可以通过参考传递来解决

但是,我不允许在main中更改任何内容,包括如何调用resize。Im也不允许更改resize_哈希函数参数。im允许更改的只是函数中的内容

哈希表的结构:

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_入口,然后相应地更改结构中的指针和大小