C++ 为什么取消引用?*&引用;函数名中使用的运算符?

C++ 为什么取消引用?*&引用;函数名中使用的运算符?,c++,C++,我目前正在学习斯坦福在线CS106B提供的这门编程入门课程。在链表结构中,教授实现了我无法理解的代码 Entry *GetNewEntry(){ cout << "Enter name (ENTER to quit):"; string name = GetLine(); if (name == "") return NULL; Entry *newOne = new Entry; // allocate in heap newOne-&g

我目前正在学习斯坦福在线CS106B提供的这门编程入门课程。在链表结构中,教授实现了我无法理解的代码

 Entry *GetNewEntry(){

    cout << "Enter name (ENTER to quit):";
    string name = GetLine();
    if (name == "") return NULL;
    Entry *newOne = new Entry; // allocate in heap
    newOne->name = name;
    cout << "Enter address: ";
    newOne->address = GetLine();
    cout << "Enter phone: ";
    newOne->phone = GetLine();
    newOne->next = NULL; // no one follows
    return newOne;
}
Entry*GetNewEntry(){
cout name=名称;
cout address=GetLine();
cout phone=GetLine();
newOne->next=NULL;//没有人跟随
返回newOne;
}
有人能帮我理解为什么函数名前有一个解引用操作符吗。如果我们删除它,会有什么变化? 我试着用谷歌搜索,但没有收到任何令人满意的结果
答案。

函数
GetNewEntry
的返回值是
Entry*
类型的指针


如果按原样从代码中删除
*
,则会返回一个
条目
,代码将无法编译,因为
newOne
是一个
条目*

它是一种称为“指向条目的指针”的类型。建议在类型名称旁边加上星号,以便于理解

//suggested to put the asterisk next to type name
Entry* GetNewEntry(){...
}

//it's ok to put next to function name too
Entry *GetNewEntry(){...
}
假设
Entry
是一个结构,那么
Entry
变量的大小将是属性大小的总和。但是,
Entry*
是指向
条目
结构的指针,无论结构中的属性数量如何,它都始终是4字节大小(32位系统)或8字节大小(64位系统)

编辑: 建议的声明更容易理解,但在这种情况下看起来是错误的:

//a is pointer, b is Entry
Entry* a,b;
解决方案是在各自的行上声明每个指针变量:

//a is pointer, b is pointer
Entry* a;
Entry* b;

Entry*GetNewEntry()
也可以写成
Entry*GetNewEntry()
。这更有意义吗?当然有,现在我知道它的意思了。但我很难理解,它是用同样的方式写在讲义中的,我只是复制了。在C和C++中,空白位置通常很松散。这是一个很好的工具,可以帮助您理解“胡言乱语”的真正含义:因此,这里的Entry是一个struct…GetNewEntry返回Entry类型的指针。是这样吗?@Ikaa1991
Entry
很有意思。可以是
int
的别名,结果相同:指向
条目的指针。编辑前面的内容并不完全清楚。在本例中,条目是一个
结构
或一个
(在C++中这两者没有太大区别)。“我想说的是,这没关系。”SalehMahmood说,他想强调好的格式。我们应该使用条目“GetNewEntry()”而不是条目“GetNewEntry()”。后者很容易理解。详细说明,返回类型是指向类型项的指针。@datdinhquoc只是为了澄清;假设我们做了指针运算,要求得到b+1的值,结果会是什么?在这种情况下,指针条目*位不是“建议”将星号放在类型名称旁边。它在语法上绑定到以下标识符,而不是前面的类型。考虑<代码>条目*A,B;<代码>。如果写的是
条目*a,b
它会提示
b
是指针,而不是。这就是OP询问的练习的原因。@user207421您能详细说明一下吗?我搞不懂你想干什么imply@Ikaa1991在
条目*a、b
中,
a
是指向
条目的指针,而
b
条目。