2016-11-25 53 views
-6

我在网上找到了一些代码C++ Chat Server。而在下面的代码中包含的东西我不明白函数类型中的星号

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

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

+6

是的......''string'和'string *'不是一回事。不过你应该去学习C++。 – Rakete1111

+0

@ Rakete1111我学会了C++ ...但是我不记得教师在这个类型之后对星号进行了任何说明。 – BoeNoe

+1

http://www.cplusplus.com/doc/tutorial/pointers/ – OldProgrammer

回答

2

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)

1

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

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

所以星号表示该类型是指向任何类型它被连接到,所以int*是一种类型,它是一个指向int,而int**是一个指针是一个指向int,所以上。

要访问返回一个指针,你将不得不取消对它的引用与*无论是在前面加上返回值,或访问使用“箭头经营者”成员(->)字符串实例。因此,代码:

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

将输出相同的文本三次,在第一个例子中,我们反引用的类和输出在它的价值,通过将取消引用指针operator<<重载运营商stringostream。在第二个例子中,我们先取消引用指针,然后访问该实例上的成员函数c_str。第三个例子也是这样,但使用“箭头”运算符。

请记住,指针可以为空,在这种情况下,解引用它会让你陷入困境。因此,在取消引用前,您应该始终检查指针是否为nullptr