指针、结构C

Pointers,structure C

如果我传递像参数函数 ** 这样的结构,我如何使用该结构?

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

函数应该这样声明

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 的对象的指针数组。但事实并非如此。

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

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

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