函数类型中的星号

Asterisk in function type

本文关键字:类型 函数      更新时间:2023-10-16

我在线找到了一些C 聊天服务器的代码。在下面的代码中包含我不收到的东西

string* buildPrompt()
{
// Code for chat server
}

string之后的星号是什么?如果我删除它,代码会停止工作吗?

string之后的星号表示它是通往内存中其他地方的string对象的指针。删除星号从功能上更改返回类型:

string* buildPrompt();  // <-- Returns pointer to a string.
string buildPrompt();   // <-- Returns an instance of a string.

我建议您在C 中对指针进行一些基本阅读,一旦您从简单的"你好,世界!"中脱颖而出后,它们对语言至关重要。程序。

https://en.wikipedia.org/wiki/pointer_(computer_programming)

在您的示例中,星号绑定到返回类型,并指示该函数将指针返回到字符串实例。

如果您删除了星号,则意味着您是按值返回字符串实例。

因此,星号表示该类型是指向其连接到的任何类型的指针,因此int*是一种指向int的指针,而int**是指指指针,是int的指针,等等。

要访问作为指针返回的字符串实例,您必须通过使用*预准备返回值或使用"箭头操作员"(->)访问成员来将其解释。因此,代码:

string* str = buildPrompt();
cout << *str << endl;
cout << (*str).c_str() << endl;
cout << str->c_str() << endl;

将三次输出相同的文本,在第一个示例中,我们通过将验证的指针传递给ostream上的stringoperator<< Overloaded Operator,将类并在其中输出值。在第二个示例中,我们首先放置指针,然后访问该实例上的构件函数c_str。第三个示例也这样做,但使用"箭头"操作员。

请记住,指针可能是无效的,在这种情况下,将其删除会让您陷入麻烦。因此,您应该始终检查指针是否是nullptr