如何将指针从 void 函数传递到另一个 C++
Posted
技术标签:
【中文标题】如何将指针从 void 函数传递到另一个 C++【英文标题】:How to pass a pointer from a void function to another C++ 【发布时间】:2018-10-30 22:08:29 【问题描述】:考虑以下代码:
void List::insertFront(int key)
Node *tmp_node = new Node;
tmp_node->key = key;
tmp_node->next = head->next;
tmp_node->prev = head;
head->next = tmp_node;
_size++;
此函数将一个元素添加到列表的开头,我想在另一个函数中捕获列表的第一个元素并将其删除。为此,我编写了以下代码:
bool List::getFront(int &key)
if (head->next->key == key)
Node *tmp_node = new Node;
head->next = tmp_node->next;
delete tmp_node;
delete head->next;
_size--;
return true;
else return false;
正如您所看到的,每次我创建一个使用新空列表的新节点时,但我想使用在前一个函数中创建的列表。
如何将节点从insertFront()
传递到getFront()
?
【问题讨论】:
insertFront()
应该更新 head
。这是列表的起点,可通过getFront()
访问
列表的第一个节点似乎是head->next
这个问题不太清楚。你知道insertFront
和getFront
是类方法并且你可以访问类的成员吗?你知道如何从函数中返回值吗?
为什么getFront
会创建一个新的Node
?这没有任何意义。
getFront
只是从列表中删除节点[如果匹配],但它会被丢弃。那有用吗?返回匹配的节点会更好(例如Node * List::getFront(int &key)
并且只是做:if (head->next->key == key) Node *tmp = head->next; head->next = tmp->next; _size--; return tmp; else return NULL;
另外,在做head->next->key
之前你不应该检查head->next
的非空值吗?
【参考方案1】:
您的getFront()
代码完全错误。你需要更多类似的东西:
bool List::popFrontIfMatches(int key)
Node *tmp_node = head->next;
if ((tmp_node) && (tmp_node->key == key))
if (tmp_node->next)
tmp_node->next->prev = tmp_node->prev;
if (tmp_node->prev)
tmp_node->prev->next = tmp_node->next;
head->next = tmp_node->next;
delete tmp_node;
_size--;
return true;
else
return false;
话虽如此,您为什么将head->next
视为列表中的第一个节点,而不是像通常的做法那样将head
本身视为?
void List::insertFront(int key)
Node *tmp_node = new Node;
tmp_node->key = key;
tmp_node->next = head;
tmp_node->prev = NULL;
head = tmp_node;
_size++;
bool List::popFrontIfMatches(int key)
Node *tmp_node = head;
if ((tmp_node) && (tmp_node->key == key))
if (tmp_node->next)
tmp_node->next->prev = tmp_node->prev;
if (tmp_node->prev)
tmp_node->prev->next = tmp_node->next;
head = tmp_node->next;
delete tmp_node;
_size--;
return true;
else
return false;
【讨论】:
以上是关于如何将指针从 void 函数传递到另一个 C++的主要内容,如果未能解决你的问题,请参考以下文章