无法弄清楚此示例中的指针逻辑
Can't figure out the pointer logic in this example
我一辈子都想不通。这是一个链表示例。
我是初学者。我已经看了大约一个小时了,我准备折叠并寻求帮助。嘿。
所以基本上问题是其中一个函数上有一个指针,函数内部有一个指针,到处都是指针,我似乎无法弄清楚这里正在采取的一系列逻辑步骤。
我最终发现的是条目 *newOne 正在定义一个"结构条目"指针。我真的不明白完整语句中发生了什么,或者不同部分如何调用值。完全。
更多细节如下。
#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 不是指针吗?那么这不就是将指针的值分配给一个地址吗......很迷茫。
只是一个地址(它是经过验证的),那么为什么说newOne->phone=phone有什么作用呢?这说不通!
- 条目
*获取新条目()(我不明白这一点 - 在函数的末尾返回 newOne 条目的地址 - * 是否可能会添加到这个"返回"值)
Entry *n = GetNewEntry()(关于具有指针符号的函数 - GetNewEntry 要么返回 newOne 内存地址,要么返回 newOne 指针 - 并且 Entry *n 是一个结构,然后条目指针将被设置为该内存地址(很像条目 *newOne = 新条目),或者它将设置为指向该地址的指针......呃)
PrintEntry(n) 引用回 PrintEntry(Entry *e)
如您所见,我很困惑。
这段代码中的第一件事:
struct Entry {
string name, phone;
Entry *next;};
是可能的电话簿条目的链接列表。我希望您熟悉链表,否则请查看此处 http://www.cprogramming.com/tutorial/lesson15.html
如果你在main中跟踪代码,它非常简单。首先,它通过调用 GetNewEntry 函数创建一个条目。此函数提示用户输入姓名和电话号码等数据,并创建 Entry 对象。
它将结构中的"next"变量设置为 null,因为这可能是它将要创建的唯一元素,并将创建的对象返回给主函数。
现在,PrintEntry函数将打印刚刚创建的条目中的数据。从我的角度来看,Entry 结构中的"next"变量在这里是无用的,但也许在你的课程中会有一个利用这个变量的 LinkedList。
Entry *newOne = new Entry;
(我不明白这一点 - 新条目不就是结构条目的地址吗?条目 *newOne 不是指针吗?那么这不就是将指针的值分配给一个地址吗......很迷茫。
指针是保存地址的变量。 new Entry
在堆上创建一个新Entry
,然后返回其地址。然后这个地址存储在newOne
中。这一行也声明了newOne
,但它可以单独写成Entry *newOne;
newOne = new Entry;
。
如果newOne只是一个地址(它是经过验证的),那么为什么说newOne->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 是一个结构,然后条目指针将被设置为该内存地址(很像条目 *newOne = new Entry),或者它将设置为指向该地址的指针......呃)
这意味着与Entry *n;
n = GetNewEntry();
相同。它声明变量n
(类型为 Entry*
)。然后它调用GetNewEntry()
.然后,它将n
设置为返回值 GetNewEntry()
PrintEntry(
- n) 引用回 PrintEntry(Entry *e)
这是一个函数调用。我不确定你在这里问什么。
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 弄清楚如何在C++中将整数读入 ASCII
- 写一个分数类,我无法弄清楚这些错误
- 分段错误(核心转储)但无法弄清楚
- N-queen问题:无法弄清楚为什么我的解决方案不起作用
- 为什么我的编译器无法弄清楚这种转换,它何时存在?
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 循环不继续无法弄清楚为什么
- 我一直试图弄清楚我在这个链表程序中做错了什么
- 无法弄清楚为什么没有调用重载运算符 []
- 无法弄清楚如何使用 c++ 中的链表按从 a 到 z 的顺序显示字母
- 我无法弄清楚"对Winmain@16错误的未定义引用"
- 谁能弄清楚为什么我的循环会失败?
- 试图弄清楚我需要做哪些更改才能使代码正常工作.使用Visual Studio
- 使用指针和引用,无法弄清楚为什么DFS无限重复
- 无法弄清楚指针行为
- C++ 简单的指针错误无法弄清楚为什么?
- 无法弄清楚此示例中的指针逻辑
- 弄清楚多态类型的c++指针是如何工作的
- 我的指向 std::string 对象的指针列表无法正常工作,我无法弄清楚为什么