指针,结构 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);
}

解决方法

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

并且数组的元素是结构,而不是指向结构的指针,因此您使用 . 而不是 ->

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

函数应该像这样声明

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