指针、结构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;
}
如果我传递像参数函数 ** 这样的结构,我如何使用该结构?
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;
}