私はC++を学ぶための基本を勉強していますが、文字やポインタについて次のものを解読しようとすると壁を叩き続けます。何が起こっているのかについての私の現在の理解を与える行コメントが含まれています。私は以下のようなコードがあることを考える:char *を表示すると、アドレスではなく文字列が返されるのはなぜですか?
using namespace std;
int main()
{
//String literal is an array of chars
//Array address gets assigned to a ptr of char
char myletters[] = {'h','i'};
char* lp = myletters;
cout << *lp << endl;
//Logically equivalent to above statements
char* letters2 = "hi";
cout << *letters2 << endl;
//String literal turns into array of chars
//Array of chars gets assigned to a ptr of chars
//Each ptr of chars gets stored into letters array
char* letters[] = {"hi","hello"};
cout << *letters << endl;
}
を私の出力は次のようになります。
h
h
hi
私の質問は:私は*手紙の内容を印刷するには、最終的なCOUTを使用するときに、なぜ私は入手できますか"hi"のアドレスまたは "hi"の最初の文字のアドレスではなく、文字列 "hi"?私はcoutの最初の使い方がcharを出力していること、そして最後のcoutがchar *を出力していることを知っていますが、なぜポインタではなく、完全な文字列を出力するのか不思議です。
ありがとうございました。
'char * 'を持つ' operator <<() 'には特別なオーバーロードがあります。 –
@πάνταῥεῖあなたはそれが答えであるため、答えを出すべきです。 – BrainStone
すべての文字列関数は文字列ポインタで機能します。メモリ位置が必要な場合は、長い__(long)stringPtr__へポインタをキャストしてください。 –