我有一个链接列表的popFront函数:
Node* popFront(Node* list)
{
Node* returnMe = (Node*)malloc(sizeof(Node));
Node* oldHead = list;
returnMe->mData = list->mData;
if (list->mNext != NULL)
list = list->mNext; // This line is definitely called
else
list = blankNode; // And not this one
free(oldHead);
return returnMe;
}
但每当我这样称呼它时:
Node* list = buildList(10);
Node* oldHead = popFront(list);
printInfo(list);
'oldHead'是正确的,但'list'仍然有它的第一个节点。
答案 0 :(得分:2)
您需要了解按值传递和按引用传递的区别。指针list
将传递给函数{{1} } 按值,表示其值被复制到函数中的局部变量中。更改该副本时,popFront()
之外的原始变量保持不变。如果您希望能够更改popFront()
的值,则需要将指针传递给list
(即,通过引用传递 >)并相应地修改list
以使用指向popFront()
的指针。
答案 1 :(得分:2)
以下是一个更简单的例子:
void foo(int x)
{
x = 2;
}
int main()
{
int x = 3;
foo(x);
// if you understand why x is still 3 here,
// then you'll understand your problem as well.
return 0;
}
答案 2 :(得分:1)
如果要更改变量list
,则需要通过指针传递它。由于list的值为Node*
,因此您需要传递popFront的签名为Node* popFront(Node **list)
。