提问人:Aaron7 提问时间:1/30/2021 更新时间:1/30/2021 访问量:46
指针,结构 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);
}
答:
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 );
通过引用函数(通过指向指针的指针)传递指针是没有意义的,因为原始指针在函数中不会更改。tmp
tmp
至于你的函数定义,那么至少你需要在函数中编写
( *tmp )[5]->m_Len = 7;
否则,该函数将调用未定义的行为,因为函数中的此表达式意味着指针指向 类型的对象的指针数组。但事实并非如此。tmp[5]
tmp
TQUEUE
1赞
Barmar
1/30/2021
#2
在索引之前需要取消引用,因为它是指向数组的指针,而不是数组本身。tmp
数组的元素是结构,而不是指向结构的指针,因此您使用 而不是 ..
->
void nahraj(TQUEUE **tmp)
{
(*tmp)[5].m_Len = 7;
}
上一个:结构体的 Qsort 数组
评论
TQUEUE **