C++ 为什么取消引用?*&引用;函数名中使用的运算符?
我目前正在学习斯坦福在线CS106B提供的这门编程入门课程。在链表结构中,教授实现了我无法理解的代码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
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类型的指针。是这样吗?@Ikaa1991Entry
很有意思。可以是int
的别名,结果相同:指向条目的指针。编辑前面的内容并不完全清楚。在本例中,条目是一个结构
或一个类
(在C++中这两者没有太大区别)。“我想说的是,这没关系。”SalehMahmood说,他想强调好的格式。我们应该使用条目“GetNewEntry()”而不是条目“GetNewEntry()”。后者很容易理解。详细说明,返回类型是指向类型项的指针。@datdinhquoc只是为了澄清;假设我们做了指针运算,要求得到b+1的值,结果会是什么?在这种情况下,指针条目*位不是“建议”将星号放在类型名称旁边。它在语法上绑定到以下标识符,而不是前面的类型。考虑<代码>条目*A,B;<代码>。如果写的是条目*a,b
它会提示b
是指针,而不是。这就是OP询问的练习的原因。@user207421您能详细说明一下吗?我搞不懂你想干什么imply@Ikaa1991在条目*a、b
中,a
是指向条目的指针,而b
是条目。