我无法解决这个问题。这是一个链表示例。
我是初学者。我已经看了大约一个小时了,我准备弃牌并寻求帮助。嘿。
基本上问题是,其中一个函数有一个指针,函数内部有指针,指针到处都是血腥的,我似乎无法弄清楚这里采取的一系列逻辑步骤
我最终弄清楚的是,Entry * newOne正在定义一个" struct Entry"指针。我并不真正了解完整陈述中发生的事情,或者不同部分如何调用值。完全没有。
以下更多细节。
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
struct Entry {
string name, phone;
Entry *next;
};
void PrintEntry(Entry *e)
{
cout << e->name << " " << e->phone << endl;
}
Entry *GetNewEntry()
{
Entry *newOne = new Entry;
cout << "Enter name (ENTER to quit):";
string name;
getline (cin,name);
if (name == "") return NULL;
newOne->name = name;
cout << "Enter phone: ";
string phone;
getline(cin, phone);
newOne->phone = phone;
newOne->next = NULL; // no one follows
return newOne;
}
int main () {
Entry *n = GetNewEntry();
PrintEntry(n);
return 0;
}
如果newOne只是一个地址(它是在验证之后)那么为什么说newOne-&gt; phone = phone会做什么?这没有意义!
条目* GetNewEntry() (我不明白这一点 - 在函数结束时返回newOne条目的地址 - *添加到此&#34;或者返回&#34;值
条目* n = GetNewEntry() (关于具有指针符号的函数 - GetNewEntry要么返回newOne内存地址,要么返回newOne指针 - 然后将Entry * n作为struct Entry指针设置为该内存地址(很像Entry * newOne) = new entry)或者它将被设置为指向该地址的指针......呃)
PrintEntry(n)引用PrintEntry(条目* e)
你可以看到我很困惑。
答案 0 :(得分:0)
此代码中的第一件事:
struct Entry {
string name, phone;
Entry *next;};
是可能的电话簿条目的链接列表。我希望您熟悉链接列表,否则请在此处查看http://www.cprogramming.com/tutorial/lesson15.html
如果您在main中跟踪代码,则非常简单。首先,它通过调用GetNewEntry函数创建一个Entry。此功能提示用户输入名称和电话号码等数据,并创建Entry对象。
它将结构中的“next”变量设置为null,因为这可能是它要创建的唯一元素,并将创建的对象返回给main函数。
现在,PrintEntry函数将打印刚刚创建的Entry中的数据。从我的观点来看,Entry结构中的“next”变量在这里没用,但是在你的课程中可能会有一个使用这个变量的LinkedList。
答案 1 :(得分:0)
- 醇>
Entry *newOne = new Entry;
(我不明白这一点 - 不是新条目只是一个结构条目的地址吗?并且不是条目* newOne一个指针?那么这不仅仅是分配值的指向地址的指针......很遗失。
指针是保存地址的变量。 new Entry
在堆上创建一个新的Entry
,然后返回其地址。然后,此地址存储在newOne
中。此行还声明了newOne
,但它可以单独编写为Entry *newOne;
newOne = new Entry;
。
如果newOne只是一个地址(它是在验证之后)那么为什么说newOne-&gt; phone = phone会做什么?这没有意义!
为什么不呢? newOne->phone
是(*newOne).phone
的缩写。 *newOne
表示“地址为newOne
的内容”,因此它是我们刚刚创建的Entry
(new Entry
)。因此(*newOne).phone
是Entry
的成员phone
。
- 醇>
Entry *GetNewEntry()
(我不明白这一点 - 在函数的末尾返回了一个返回newOne条目的地址 - 也许*添加到这个“返回”值)
Entry *
是返回类型。它也可以写成Entry* GetNewEntry()
。此函数返回指向Entry
的指针(或Entry
的地址;根据需要调用它)。类型中的*
表示“指向”(或“地址”)之前的东西。
- 醇>
Entry *n = GetNewEntry();
(关于具有指针符号的函数 - GetNewEntry要么返回newOne内存地址,要么返回newOne指针 - 然后将Entry * n作为struct Entry指针设置为内存地址(很像Entry * newOne = new Entry)或者它将被设置为指向该地址的指针......呃)
这意味着与Entry *n;
n = GetNewEntry();
相同。它声明变量n
(类型为Entry*
)。然后它调用GetNewEntry()
。然后,它将n
设置为GetNewEntry()
- PrintEntry(n)返回PrintEntry(Entry * e)
醇>
这是一个函数调用。我不确定你在这里问的是什么。