调用函数时如何使用指针

时间:2017-11-23 02:00:08

标签: c function pointers

我在使用C编程时遇到了一些问题。我有一个结构,就像

 typedef struct Hash_Funct{
char* name;             
Var_Table * List_of_Variables;   ///pointer to list of variables
} Hash_Funct;

在某些代码点,我想用以下内容来理论化结构:

    Hash_Funct tmp = (Hash_Funct*) malloc(sizeof(Hash_Funct));
    tmp->name=name;
    Init_ID_Table(tmp->List_of_Variables);

Init_ID_Table();定义为:

void Init_ID_Table(Var_Table *table){
    table = (Var_Table*) malloc ( sizeof(Var_Table) );
    for(int i=0; i< SIZE;i++){
        (*table)[i] = NULL;
    }
}

但是,在此代码的末尾,似乎Init_ID_Table()似乎对* List_of_Variables指针(现在应指向大小为SIZE的表并且其所有元素都设置为NULL)有任何影响。任何人都可以至少告诉我发生了什么,如果没有如何改变它按预期工作?

非常感谢, 亚当

1 个答案:

答案 0 :(得分:1)

变量按值传递,赋值给函数中的参数变量对调用者的变量没有影响。

你需要传递一个指向结构成员的指针,并通过它间接地修改调用者的变量。

void Init_ID_Table(Var_Table **table) {
    Var_Table *temp_table = malloc ( sizeof(Var_Table) );
    for (int i = 0; i < SIZE; i++) {
        temp_table[i] = NULL;
    }
    *table = temp_table;
}

然后你会这样称呼它:

Init_ID_Table(&(tmp->List_Of_Variables));
相关问题