这个奇怪的数字在输出中意味着什么?这是一些内存位置吗?
What does this strange number mean in the output? Is this some memory Location?
节点Class如下:
class node
{
public:
int data; //the datum
node *next; //a pointer pointing to node data type
};
PrintList函数如下:
void PrintList(node *n)
{ while (n != NULL)
{
cout << n->data << endl;
n = n->next;
}
}
如果我尝试 运行 它我得到了所有三个值 (1,2,3) 但我也得到了一个额外的数字,我无法弄清楚它代表什么,有人可以扔灯一样吗?
int main()
{
node first, second, third;
node *head = &first;
node *tail = &third;
first.data = 1;
first.next = &second;
second.data = 2;
second.next = &third;
third.data = 3;
PrintList(head);
}
我知道它可以用
修复
third.next = NULL;
但我很好奇这个数字在输出中代表什么,如果我省略上面的行
1
2
3
1963060099
如 prapin 评论中所述,third.next
未初始化。
C++ 有一个零开销规则。
自动初始化一个变量会违反这条规则,因为该值可能会在稍后被初始化(第二次)或者甚至永远不会被使用。
third.next
的值只是恰好与 third.next
现在位于同一内存位置的数据。
因此,建议始终自行初始化变量。
最好初始化变量&最好使用nullptr
。那样(见1-3):
#include <iostream>
class node
{
public:
int data = 0; // 1
node* next = nullptr; // 2
};
void PrintList(node* n)
{
while (n != nullptr) // 3
{
std::cout << n->data << std::endl;
n = n->next;
}
}
int main()
{
node first, second, third;
node* head = &first;
node* tail = &third;
first.data = 1;
first.next = &second;
second.data = 2;
second.next = &third;
third.data = 3;
// third.next points to where?
PrintList(head);
}
补充说明:
我更愿意使用STL容器std::list
:
#include <list>
#include <iostream>
std::list<int> int_list;
void PrintList()
{
for (auto i : int_list)
std::cout << i << std::endl;
}
int main()
{
int_list.push_back(1);
int_list.push_back(2);
int_list.push_back(3);
PrintList();
}
或者如果是 node
个对象的列表:
#include <list>
#include <iostream>
class node
{
public:
node(int data) : m_data{ data } {};
int m_data = 0;
// and maybe extra data-members
};
std::list<node> node_list;
void PrintList()
{
for (auto i : node_list)
std::cout << i.m_data << std::endl;
}
int main()
{
node_list.push_back(node(1));
node_list.push_back(node(2));
node_list.push_back(node(3));
PrintList();
}
节点Class如下:
class node
{
public:
int data; //the datum
node *next; //a pointer pointing to node data type
};
PrintList函数如下:
void PrintList(node *n)
{ while (n != NULL)
{
cout << n->data << endl;
n = n->next;
}
}
如果我尝试 运行 它我得到了所有三个值 (1,2,3) 但我也得到了一个额外的数字,我无法弄清楚它代表什么,有人可以扔灯一样吗?
int main()
{
node first, second, third;
node *head = &first;
node *tail = &third;
first.data = 1;
first.next = &second;
second.data = 2;
second.next = &third;
third.data = 3;
PrintList(head);
}
我知道它可以用
修复third.next = NULL;
但我很好奇这个数字在输出中代表什么,如果我省略上面的行
1
2
3
1963060099
如 prapin 评论中所述,third.next
未初始化。
C++ 有一个零开销规则。
自动初始化一个变量会违反这条规则,因为该值可能会在稍后被初始化(第二次)或者甚至永远不会被使用。
third.next
的值只是恰好与 third.next
现在位于同一内存位置的数据。
因此,建议始终自行初始化变量。
最好初始化变量&最好使用nullptr
。那样(见1-3):
#include <iostream>
class node
{
public:
int data = 0; // 1
node* next = nullptr; // 2
};
void PrintList(node* n)
{
while (n != nullptr) // 3
{
std::cout << n->data << std::endl;
n = n->next;
}
}
int main()
{
node first, second, third;
node* head = &first;
node* tail = &third;
first.data = 1;
first.next = &second;
second.data = 2;
second.next = &third;
third.data = 3;
// third.next points to where?
PrintList(head);
}
补充说明:
我更愿意使用STL容器std::list
:
#include <list>
#include <iostream>
std::list<int> int_list;
void PrintList()
{
for (auto i : int_list)
std::cout << i << std::endl;
}
int main()
{
int_list.push_back(1);
int_list.push_back(2);
int_list.push_back(3);
PrintList();
}
或者如果是 node
个对象的列表:
#include <list>
#include <iostream>
class node
{
public:
node(int data) : m_data{ data } {};
int m_data = 0;
// and maybe extra data-members
};
std::list<node> node_list;
void PrintList()
{
for (auto i : node_list)
std::cout << i.m_data << std::endl;
}
int main()
{
node_list.push_back(node(1));
node_list.push_back(node(2));
node_list.push_back(node(3));
PrintList();
}