考虑此链接列表定义:
typedef struct lligada{
int value;
struct lligada *prox;
}*LInt;
void newInteger(LInt l, int value){
LInt p = l;
LInt node = (LInt)malloc(sizeof(struct lligada));
node->value = value;
node->prox = NULL;
while (p->prox) p = p->prox;
p->prox = node;
}
p
辅助指针是否必要/良好实践?或者我可以直接遍历LInt l
吗?
答案 0 :(得分:0)
您不需要p
;由于C按值传递参数,l
仅包含原始参数值的副本,因此对l
的更改在函数外部没有任何影响。请注意,这与更改l
指向的内容不同,可以在函数外部产生影响,与更改p
指向的内容有关。
答案 1 :(得分:0)
一般来说,函数是无效的,因为列表可以为空,在函数内部有更改的局部变量l
,它将在退出函数后被销毁,因为函数参数是它的局部变量。因此,不会更改空列表。
同样不清楚为什么要尝试将新节点添加到单面列表的尾部。
在任何情况下,该功能都可以查找例如
void newInteger( LInt *l, int value )
{
LInt node = malloc( sizeof( *LInt ) );
if ( node != NULL )
{
node->value = value;
node->prox = NULL;
while ( *l != NULL ) l = &( *l )->prox;
*l = node;
}
}
答案 2 :(得分:0)
您可以遍历局部变量l
。它已经是发送到函数的指针的副本(很可能是在堆栈上分配的)。更改它不会影响原始指针。
回答问题:
没有必要。
我无法看到它成为良好做法的原因。
PS - 也许你想要对该函数的空指针进行一些错误检查。