奇妙な問題に遭遇しました。C++ の場合
char s[]="123abc89";
cout<<s[0]<<endl; //1 it is right
cout<<&s[0]<<endl; // I can't understand why it is "123abc89"
よろしくお願いします。
奇妙な問題に遭遇しました。C++ の場合
char s[]="123abc89";
cout<<s[0]<<endl; //1 it is right
cout<<&s[0]<<endl; // I can't understand why it is "123abc89"
よろしくお願いします。
s[0]
文字配列の最初の要素です。&s[0]
配列のアドレスと同じ、最初の要素のアドレスです。文字配列の開始アドレスを指定すると、次の operator<< のオーバーロードをstd::cout
使用して、そのアドレスから始まる文字列全体を出力します。
// prints the c-style string whose starting address is "s"
ostream& operator<< (ostream& os, const char* s);
文字配列の開始アドレスを出力したい場合、1 つの方法は次のとおりです。
// std::hex is optional. It prints the address in hexadecimal format.
cout<< std::hex << static_cast<void*>(&s[0]) << std::endl;
これは、代わりに operator<< の別のオーバーロードを使用します。
// prints the value of a pointer itself
ostream& operator<< (const void* val);
C(およびC ++)が文字列を処理する方法の内部に遭遇しています(C ++の std::string ではありません)。
文字列は、その最初の文字へのポインターによって参照されます。これを示すコードは次のとおりです。
char *ptr;
ptr = "hello\n";
printf("%s\n", ptr);
ptr++;
printf("%s\n", ptr);