2013-06-12 14 views
6

私がテストしていたこのコードで混乱したときに、ポインタと配列を使って遊んでいました。C++アンパサンドオペレータと文字配列

#include <iostream> 
using namespace std; 

int main(void) { 
    char a[] = "hello"; 
    cout << &a[0] << endl; 
    char b[] = {'h', 'e', 'l', 'l', 'o', '\0'}; 
    cout << &b[0] << endl; 
    int c[] = {1, 2, 3}; 
    cout << &c[0] << endl; 
    return 0; 
} 

これは、3つのアドレス([0]、b [0]およびc [0]のアドレス)を印刷すると予想しました。しかし、結果はでした:

hello 
hello 
0x7fff1f4ce780 

なぜCHARとの最初の2例のために、「&」は、文字列全体をことを与えているか、私はここで何かが足りないのですか?

答えて

10

coutoperator <<は、char*をパラメータとして渡すと文字列を出力します。これは&a[0]です。

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

か、単に

cout << static_cast<void*>(a) << endl; 
を:あなたはアドレスを印刷したい場合は、明示的 void*にキャストする必要があります