在C中传递结构

时间:2015-09-01 11:31:32

标签: c function pointers structure

当我将struct指针传递给函数时,我希望在函数结束后保留​​对指针所做的更改。我不知道我做错了什么。

void webSocketHandler(struct libwebsocket_context* context)
{    
    /* some code */
    context = libwebsocket_create_context(&info);
}

sint32 s32_WSER_Init(sint32* configDataPoolIndexes, struct libwebsocket_context* context)
{
   /* some code */
  webSocketHandler(configDataPoolIndexes, context);
}

问题是context在创建NULL之后不是webSocketHandler,但如果我在调用处理程序后尝试在s32_WSER_Init内使用它,我会{ {1}}。

提前致谢。

2 个答案:

答案 0 :(得分:5)

如果要将指针修改为struct,则必须将指向的指针传递给struct:

void webSocketHandler(struct libwebsocket_context** context)
{    
    /* some code */
    /* info parameter missing above? */
    *context = libwebsocket_create_context(&info);
}


sint32 s32_WSER_Init(sint32* configDataPoolIndexes, struct libwebsocket_context* context)
{
   /* some code */
  webSocketHandler(configDataPoolIndexes, &context);
}

您的原始代码将修改context参数的值,该参数基本上是函数中的局部变量。 C没有实际引用,它按值传递指针,然后允许通过指针修改原始数据。如果original是指针,并且你想修改它,则需要指向指针。

答案 1 :(得分:2)

您想要的是通过引用传递指针 。不幸的是C没有,但可以使用指针模拟

void webSocketHandler(struct libwebsocket_context** context)
{
    ...
    *context = ...;
    ...
}

void some_other_function(void)
{
    struct libwebsocket_context* context = NULL;
    ...
    webSocketHandler(&context);
    ...
}