2015-09-01 198 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); 
    ... 
}