为什么在函数名称中使用取消引用" * "运算符?

Why is a dereference " * " operator used in the function name?

本文关键字:引用 取消 运算符 函数 为什么      更新时间:2023-10-16

我目前正在学习斯坦福在线提供的入门编程课程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;
}

任何人都可以帮助我理解为什么函数名称之前有一个取消引用运算符。如果我们删除它,会有什么变化? 我试图谷歌它,但我没有得到任何满意 答案。

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

如果按原样从代码中删除*,则最终将返回Entry,并且代码将无法编译,因为newOne是一个Entry *

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

//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*是指向Entry结构的指针,无论结构中的属性数量如何,它始终具有 4 字节大小(32 位系统(或 8 字节大小(64 位系统(。

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

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

解决方案是在自己的行上声明每个指针变量:

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