2016-11-19 5 views
-2

私が正しく覚えていれば、クラス1では、配列へのポインタを設定すると、その配列の最初の要素のアドレスを保持するポインタが設定されることがわかりました。char配列へのポインタは、最初の要素のアドレスの代わりに配列要素を出力しますか?

int main() { 
char str1[5] = {'j', 'h', 'i', 'o', '\0'}; 
cout << str1 << endl; 
char *a=str1; 
cout << a << endl; 
} 

ただし、次のコードは、メモリアドレスjの代わりに 'jhio'を出力します。何故ですか?

+0

'char *'の 'operator <<'は、指定された文字を出力するためにオーバーロードされます –

答えて

3

operator <<には多くの種類のオーバーロードがあります。タイプchar *の場合は、ポインタが指す文字列を出力します。あなたは出力へのポインタに格納されているアドレスをしたい場合は、文字列1のタイプはcout << "hello world"と同じコールにのぼるCスタイルの文字列である、char *に低下し

cout << (void *)a << endl; 

または

cout << static_cast<void *>(a) << endl; 
0

を書く必要があります。 COUTで

0
char str1[5] = {'j', 'h', 'i', 'o', '\0'}; 
cout << str1 << endl; 
char *a=&str1[0]; 
cout << &a << endl; 

演算子「< <」は、それがそのターゲットに格納された値をプリントアウトしますcout << a << endl;を書くライン

0

の先頭へのポインタを取ります。ポインタのアドレスを出力する場合は、&を使用します。これは、参照渡しでよく見られ、ポインタのアドレスを取得します。これは、cout << &a << endl;のようになります。

関連する問題