2013-06-12 14 views
6

Stavo solo giocando con i puntatori e gli array quando mi sono confuso con questo pezzo di codice con cui stavo testando.C++ operatore e commerciale con array di carri

#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; 
} 

Mi aspettavo che questo sarebbe stampare tre indirizzi (quello di un [0], b [0] c [0]). Ma il risultato è stato:

hello 
hello 
0x7fff1f4ce780 

Perché è che per i primi due casi con char, '&' dà l'intera stringa o mi manca qualcosa qui?

risposta

10

Perché operator << di cout stampa una stringa se si passa a char* come parametro, che è ciò che è &a[0]. Se si desidera stampare l'indirizzo, dovrete lanciare esplicitamente a void*:

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

o semplicemente

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