【发布时间】:2016-01-20 03:35:50
【问题描述】:
我这辈子都想不通。这是一个链表示例。
我是初学者。我已经看了大约一个小时,我准备折叠并寻求帮助。呵呵。
所以基本上问题在于其中一个函数上有一个指针,函数内部有指针,而且指针到处都是血腥的,我似乎无法弄清楚这里正在采取的一系列逻辑步骤。
我最终发现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 = 新条目 (我不明白这一点 - new Entry 不只是一个 struct Entry 的地址吗?Entry *newOne 不是一个指针吗?那么这不只是将指针的值分配给一个地址......相当迷路了。
如果 newOne 只是一个地址(在验证之后),那么为什么说 newOne->phone=phone 会做任何事情呢?这没有意义!
条目 *GetNewEntry() (我不明白这一点 - 在函数的末尾返回 newOne 条目的地址 - * 是否可能添加到这个“返回”值)
条目 *n = GetNewEntry() (与上面有指针符号的函数有关 - GetNewEntry 要么返回 newOne 内存地址,要么返回 newOne 指针 - 并且 Entry *n 作为结构 Entry 指针然后将被设置为该内存地址(很像 Entry *newOne = 新条目),否则它会被设置为指向该地址的指针...呃)
PrintEntry(n) 指回 PrintEntry(Entry *e)
如你所见,我很困惑。
【问题讨论】:
-
从here 挑选一本好书,了解指针及其工作原理。
-
if (name == "") return NULL;内存泄漏!!在这种情况下,您不要删除newOne。 -
那么问题是什么?
-
我在代码后面的底部添加了一些具体的问题。我只是对这里使用指针的方式感到困惑。
-
“那这不就是把指针的值赋值给一个地址吗”——“地址”和“指针值”的意思是一样的。