【发布时间】:2011-10-12 05:27:19
【问题描述】:
我无法理解这段代码。我真正需要的是修改头指针以指向第一个元素。那么为什么 *head 不工作呢?更改 *head 的值会更改此指针指向的位置并且应该可以工作,对吗?我已经阅读了按引用传递/按值传递,但发现很难理解。有人可以帮助澄清这一点吗? 感谢你的帮助。谢谢。
在 C/C++ 中,指针误用更容易出错。考虑一下在列表前面插入元素的 C/C++ 代码:
bool insertInFront( IntElement *head, int data ){
IntElement *newElem = new IntElement;
if( !newElem ) return false;
newElem->data = data;
head = newElem; // Incorrect!
return true;
}
前面的代码是不正确的,因为它只更新了头指针的本地副本。正确的版本传入一个指向头指针的指针:
bool insertInFront( IntElement **head, int data ){
IntElement *newElem = new IntElement;
if( !newElem ) return false;
newElen->data = data;
*head = newElem; // Correctly updates head
return true;
}
【问题讨论】:
-
我没有学过编程,但是如果
IntElement似乎没有专门用于链接元素的字段,它怎么是链表? =\ -
是的,代码丢失 newElem->next = *head;
标签: c pointers linked-list