2015-09-01 195 views
0

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

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); 
} 

的问题是,contextNULL里面webSocketHandler创建后,但如果我尝试调用处理后使用它里面s32_WSER_Init,我得到NULL

在此先感谢。

回答

5

如果你想修改指针为结构,必须通过指针的指针为结构:

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是指针,并且您想修改它,则需要指向指针。

+0

感谢。我通过了这样的普通指针,所以我认为它对于结构来说也是一样的。 – Modasser

+0

@ModasserRahman在C中,您可以像处理任何值一样处理结构,例如整数。这真是令人惊讶的高级功能,像C这样的语言。你可以例如传递并返回,并通过将它们包装在一个结构中来赋值(已知和固定长度)数组。 – hyde

+0

thnx很多@hyde。我还有一个与此有关的问题。我如何在功能 'function(struct a ** b){(* b) - > state;}' 中使用'b-> state'我试过了这种形式,但是'(* b) - >状态'不起作用 – Modasser

2

你想要的是通过参考传递指针。不幸的是C没有这一点,但它可以仿真使用指针:

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

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