我在使用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)有任何影响。任何人都可以至少告诉我发生了什么,如果没有如何改变它按预期工作?
非常感谢, 亚当
答案 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));