2016-09-24 10 views
0
int main(){ 
    char a[] = "Ab"; 
    char *ptr = a; 
    //ptr = a; 
    cout << &a << a[0] << endl; 
    cout << ptr << endl; 

    char c= 'C'; 
    char *pC = &c; 
    cout << &c << " :: " << pC << endl; 
    cout << pC << endl; 
} 

出力: 0x7fffcb399550A アブ CAB :: CAB CAB印刷アドレス

最後の2つの出力を理解することができません。

答えて

0

&cおよびpCは両方とも1文字のポインタです。

operator<<はどこか\0含まれている文字の配列に、あるNULLで終わる文字列へのポインタであることをタイプchar*のオペランドが必要です。

それ以外の場合は、動作はで、定義されていないのはです。

+0

返信ありがとうございますが、もう一度混乱があります。なぜこの同じ動作がchar a [] = "ab"に適用されないのですか? &aを出力しようとすると、オペレータはchar *としてオペランドタイプを取るべきです。そして、アドレスではなく文字列 "ab"を出力する必要があります。なぜ文字列の先頭のアドレスを出力するのですか?char c = 'C'の場合、&cは文字 'C'を出力しますか? – user3248678

+0

@ user3248678 'a 'は' char'型ではないので '&a'は' char * '型ではありません。 –