【问题标题】:Pointers,structure C指针,结构 C
【发布时间】:2021-05-03 20:53:43
【问题描述】:

如果我传递参数函数**之类的结构,我该如何使用该结构?

typedef struct TQueue
{
    ...
    int m_Len;
}TQUEUE;

void nahraj(TQUEUE **tmp)
{
    tmp[5]->m_Len = 7;
}

int main (void)
{
    TQUEUE *tmp;
    tmp = malloc(10*sizeof(*tmp));
    nahraj (&tmp);
    printf("%d\n",tmp[5].m_Len);
}

【问题讨论】:

  • 您发布的代码是否有效?如果没有,怎么办?
  • 通常如果一个函数接受TQUEUE **参数,那是因为函数需要分配内存。

标签: arrays c pointers structure alloc


【解决方案1】:

您需要在索引它之前取消引用tmp,因为它是指向数组的指针,而不是数组本身。

并且数组的元素是结构,而不是指向结构的指针,所以你使用.而不是->

void nahraj(TQUEUE **tmp)
{
    (*tmp)[5].m_Len = 7;
}

【讨论】:

    【解决方案2】:

    函数应该像这样声明

    void nahraj(TQUEUE *tmp, size_t i, int value )
    {
        tmp[i]->m_Len = value;
    }
    

    并像这样称呼

    nahraj( tmp, 5, 7 );
    

    通过引用函数(通过指向指针tmp的指针)传递指针tmp是没有意义的,因为原始指针在函数内没有改变。

    至于你的函数定义,那么至少你需要在函数中编写

    ( *tmp )[5]->m_Len = 7;
    

    否则函数将调用未定义的行为,因为函数内的这个表达式tmp[5] 意味着指针tmp 指向一个指向TQUEUE 类型对象的指针数组。但事实并非如此。

    【讨论】:

      猜你喜欢
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多