更改函数内的指针

标签 c function pointers data-structures hash

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

相关文章:

c - 子进程之间的管道

Swift 完成处理程序 - 转义尾随闭包

function - 如何在 F# 中编写自己的 List.map 函数

C++数组作为指针问题

c - Linux 内核 : why do 'subclass' structs put base class info at end?

c - 在 C 语言的 Mac OS X 上使用 libpcap 进行嗅探

c++ - C和C++中的编译器优化和临时分配

python - 将列表或单个整数作为参数处理

c++ - 释放空指针

c - 运行 C 可执行文件时 argv[0] 的精确值