2016-11-25 11 views
-6

C++ Chat Serverのコードをオンラインで検索しました。そして、以下のコードでは、私はアスタリスク(ファンクションタイプ)

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

そのアスタリスクがstring後にどのようなものですか?取得しない何かが含まれていますか私がそれを取り除くと、コードは機能しなくなるでしょうか?

+6

はい....「文字列」と「文字列*」は同じものではありません。あなたは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; 

ウィル出力と同じテキスト三回は、最初の例では、我々はostreamstringためoperator<<オーバーロードされたオペレータに間接参照ポインタを渡すことによって、クラスおよび出力することで値をderefence。 2番目の例では、まずポインタを逆参照し、そのインスタンスのメンバ関数c_strにアクセスします。 3番目の例は同じことを行いますが、 "arrow"演算子を使用します。

ポインタはNULLにすることができます。逆参照すると、問題が発生します。したがって、逆参照する前に、ポインタがnullptrかどうかを常に確認する必要があります。

関連する問題