【问题标题】:Passing a structure in C在 C 中传递结构
【发布时间】:2015-09-01 11:31:32
【问题描述】:

当我将 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 在创建后不是 NULLwebSocketHandler 内,但是如果我在调用处理程序后尝试在 s32_WSER_Init 内使用它,我会得到 NULL

提前致谢。

【问题讨论】:

    标签: c function pointers structure


    【解决方案1】:

    如果要修改pointer为struct,必须将pointer to pointer传递给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 是指针,你想修改它,你需要指向指针。

    【讨论】:

    • 谢谢。我传递了这样的普通指针,所以我认为结构也一样。
    • @ModasserRahman 在 C 中,您可以像处理任何值一样处理结构,例如整数。真的,它在像 C 这样的语言中具有令人惊讶的高级特性。例如,您可以通过将数组包装在结构中来按值传递、返回和分配(已知和固定长度)数组。
    • 谢谢@hyde。我有另一个与此相关的问题。如何在function(struct a** b){ (*b)->state;}函数中使用b->state这个形式我试过了但是(*b)->state不起作用
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      相关资源
      最近更新 更多