当我将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}}。
提前致谢。
答案 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);
...
}