为什么在函数名称中使用取消引用" * "运算符?
Why is a dereference " * " operator used in the function name?
我目前正在学习斯坦福在线提供的入门编程课程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;
相关文章:
- C++取消引用指针.为什么会发生变化
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 取消引用运算符不能重载
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- C++ 关于指针取消引用的技术问题
- 没有取消引用/解包对象的标准方法?
- 列表 iter 不取消引用 使用列表进行插入排序
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 取消引用结束指针到数组类型的一个
- 取消引用向量时出现问题
- 取消引用指向整数的指针时获得不同的结果
- C++:取消引用十六进制值,有点语法问题
- C/C++ 取消引用错误:在空检查之前取消引用
- 取消引用后C++空测试
- 立即取消引用unique_ptr
- 如何在不使用临时变量的情况下取消引用返回指针的函数的返回值?
- 取消引用 void 指针以将值分配给结构
- boost_multi_index迭代器取消引用给出常量
- 为什么"std::uninitialized_copy"通常取消对未初始化内存的迭代器的引用不是未定
- 矢量迭代器不能与 std::shared_ptr<> 取消引用