我正在尝试理解一段代码。 我有一个结构,并全局创建一个结构变量,然后将创建的结构变量的地址传递给不同的函数。 在REC_createInstance中,我将oil_qty的值分配为5。 在REC_testInstance中,我正在尝试读取oil_qty的值 例如) 在这种情况下,它可以工作。创建结构变量时。 并通过程序保留分配给函数内部结构变量的值。
t_REC_instance instance;
void main()
{
REC_createInstance(&instance);
REC_testInstance(&instance);
}
但是在下面的代码中,当创建结构指针并将其传递给函数时,我无法读取在REC_createInstance中分配的REC_testInstance中的oil_qty值。
t_REC_instance *instance; // structure pointer is created
void main()
{
REC_createInstance(instance);
REC_testInstance(instance);
}
int REC_createInstance(t_REC_instance* instance)
{
instance = malloc(sizeof(t_REC_instance)); //code needed when structure pointer is created
instance->currentRecipe =REC_Alloc();
if (!instance->currentRecipe)
{
return -5;
//BEF_EHJ_LOG(-5, destroy_ctx);
}
instance->currentRecipe->tAppBread.oil_qty=5;
return 0;
destroy_ctx:
return -5;
}
int REC_testInstance(t_REC_instance* instance)
{
int var=instance->currentRecipe->tAppBread.oil_qty;
}
创建结构指针时会发生什么?为什么我看不到指定的oil.qty的值 在其他功能的REC_createInstance中?感谢您分享知识。
答案 0 :(得分:0)
在REC_createInstance
中,您正在修改instance
,它是函数的参数。更改参数不会反映在调用函数中。
您需要传入要修改的变量的地址,并在函数内部进行相应的取消引用。
所以您的函数应如下所示:
int REC_createInstance(t_REC_instance **instance)
{
*instance = malloc(sizeof(t_REC_instance));
(*instance)->currentRecipe =REC_Alloc();
...
您这样称呼它:
REC_createInstance(&instance);