2013-06-12 10 views
6

Właśnie bawiłem się wskaźnikami i tablicami, kiedy pomyliłem się z tym kodem, z którym testowałem.C++ ampersand operator z tablicami znaków

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

że oczekuje się, że będzie to drukowanie trzy adresy (czyli od A [0], B [0] i C [0]). Ale wynik był następujący:

hello 
hello 
0x7fff1f4ce780 

Dlaczego jest to, że w ciągu pierwszych dwóch przypadkach z char „&” daje cały łańcuch albo ja czegoś tu brakuje?

Odpowiedz

10

Ponieważ cout „s operator << drukuje znaków, jeśli przechodzą mu char* jako parametr, który jest co &a[0] jest. Jeśli chcesz wydrukować adres, musisz jawnie oddanych do void*:

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

czy tylko

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