指针,结构 C

Pointers,structure C

提问人:Aaron7 提问时间:1/30/2021 更新时间:1/30/2021 访问量:46

问:

如果我传递参数函数等结构,我该如何处理该结构**?

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);
}
数组 C 指针 结构 alloc

评论

0赞 John Zwinck 1/30/2021
您发布的代码有效吗?如果不是,怎么不?
0赞 Barmar 1/30/2021
通常,如果函数采用参数,那是因为该函数需要分配内存。TQUEUE **

答:

0赞 Vlad from Moscow 1/30/2021 #1

该函数应声明如下

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

并称

nahraj( tmp, 5, 7 );

通过引用函数(通过指向指针的指针)传递指针是没有意义的,因为原始指针在函数中不会更改。tmptmp

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

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

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

1赞 Barmar 1/30/2021 #2

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

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

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