2016-11-19 1 views
-2

Wenn ich mich richtig erinnere, lernte ich in der Klasse, dass das Setzen eines Zeigers auf ein Array den Zeiger auf die Adresse des ersten Elements dieses Arrays setzt.Zeiger auf ein Char-Array druckt Array-Elemente anstelle der Adresse des ersten Elements?

int main() { 
char str1[5] = {'j', 'h', 'i', 'o', '\0'}; 
cout << str1 << endl; 
char *a=str1; 
cout << a << endl; 
} 

Der folgende Code druckt jedoch "jhio" anstelle der Speicheradresse von j aus? Warum das?

+0

'Operator <<' für 'char *' ist überladen, um die Zeichen, auf die gezeigt wird, auszudrucken –

Antwort

3

Die operator << ist für viele Typen überlastet. Für den Typ char * gibt es die Zeichenfolge aus, auf die der Zeiger zeigt. Wenn Sie die Adresse gespeichert in dem Zeiger ausgegeben werden soll, sollten Sie

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

oder

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

str1 des Typs schreiben degradiert * auf char, die eine C-Stil-Zeichenfolge ist, die als cout << "hello world" auf den gleichen Anruf beträgt .

0
char str1[5] = {'j', 'h', 'i', 'o', '\0'}; 
cout << str1 << endl; 
char *a=&str1[0]; 
cout << &a << endl; 

Operator „< <“ in cout, es nimmt einen Zeiger auf den Anfang der Zeile

0

cout << a << endl; Schreiben wird an diesem Ziel gespeichert sind die Werte drucken. Wenn Sie die ADRESSE des Zeigers drucken möchten, verwenden Sie die &, die häufig in dem Übergabe-by-Verweis angezeigt wird, um die Adresse des Zeigers abzurufen. Dies würde wie folgt aussehen: cout << &a << endl;.

Verwandte Themen