【发布时间】:2015-05-08 01:53:48
【问题描述】:
当我尝试将新元素推回列表时遇到问题。
这个问题是根据主体中的调用编写PushBack()的函数实现。所以我的问题只是关于函数PushBack()。
#include <iostream>
class Node{
public:
static Node* MakeNode() { return new Node(100); }
Node* prev;
Node* next;
int value;
private:
Node(int num) : value(num), prev(NULL), next(NULL) {}
};
void PushBack(Node* simple, Node* newNode){
if (simple == NULL){
//still a empty list
simple = newNode;
}
else{
//need to loop to the end of list because there is no "tail" in the class
Node* itr = simple;
while (itr->next != NULL){
itr = itr->next;
}
newNode->prev = itr;
itr->next = newNode;
}
return;
}
int main()
{
Node* simple = NULL;
PushBack(simple, Node::MakeNode());
std::cout << (simple == NULL);
PushBack(simple, Node::MakeNode());
PushBack(simple, Node::MakeNode());
PushBack(simple, Node::MakeNode());
while (simple != NULL){
std::cout << simple->value << std::endl;
simple = simple->next;
}
return 0;
}
我有两个关于函数PushBack()的参数类型的问题:
MakeNode()的返回类型是static Node*,但是为什么我们要把PushBack()中的第二个参数类型设置为Node*呢?为什么不static Node *?一开始,我尝试了
void PushBack(Node* simple, Node* newNode),但是当程序完成并从PushBack()退出时,simple又变成了NULL。 所以新元素不能添加到列表中。我必须使用void PushBack(Node*& simple, Node* newNode)。
为什么我需要在此处添加& 符号?我认为如果我将指针值传递给函数,可以直接更改指针简单。但似乎情况并非如此。
我的问题和这个段有什么区别:?
void changeVal(int* data){
for (int i = 0; i < 9; i++)
*(data + i) = 99;
}
void main()
{
int *data;
data = new int[10];
changeVal(data);
for (int i = 0; i < 9; i++)
std::cout << data[i] << std::endl;
}
我将指针data传递给changeVal(),函数内部可以改变内容。我不太明白这两者的区别。
我没能在网上找到一些有用的解释,所以我在这里问。
【问题讨论】: