将结构指针传递给函数

时间:2020-03-09 16:57:38

标签: c structure

我正在尝试理解一段代码。 我有一个结构,并全局创建一个结构变量,然后将创建的结构变量的地址传递给不同的函数。 在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中?感谢您分享知识。

1 个答案:

答案 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);