问题描述
如果我传递像参数函数 ** 这样的结构,我如何处理结构?
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
的对象的指针数组。但事实并非如此。