2016-09-01 4 views
-3

Wenn wir beispielsweise erklärenC++, die Array-Elemente in Strings Punkt

const char* suit[3] = {"Head", "Dia", "Mod"}; 

Dies bedeutet, dass beispielsweise suit[0] speichert die Adresse von "H". Warum also, wenn Sie std::cout << suit[0] drucken "Head"?

+2

Sie beachten Sie, dass 'char * Anzug [3] = { "Kopf", "Dia", "Mod"}' nicht Standard-konform – NathanOliver

Antwort

6

Denn wenn man operator<<(std::ostream&, const char*) nennen, nimmt die Bibliothek, die die Zeiger auf das erste Element eines nullterminierten Array von Zeichen - die es hier tut: suit[0] Punkte wirklich auf dem Array {'H', 'e', 'a', 'd', '\0'}.

2

Wenn Sie möchten, dass nur ‚H‘ bekommen möchten Sie schreiben:

std::cout << suit[0][0] << std::endl; 

denn wenn man nur sagen suit[0] Sie einen Zeiger erhalten auf „Kopf“, und das Programm wird alles drucken, bis es trifft den '\0' Charakter. Einfache Zeiger Arithemtik.

Einige Beispiele:

std::cout << suit[1] << std::endl; //prints Dia 
std::cout << suit[1][0] << std::endl; //prints D 
std::cout << suit[2] << std::endl; //prints Mode