Bedenken Sie den folgenden Codeausschnitt:
class Address { int i ; char b; string c; public: void showMap ( void ) ; }; void Address :: showMap ( void ) { cout << "address of int :" << &i << endl ; cout << "address of char :" << &b << endl ; cout << "address of string :" << &c << endl ; }
Erwartungsgemäß sollte die Ausgabe angezeigt werden die Adressen der Mitgliedsvariablen int, char und string. Die Adresse der char-Variablen b bleibt jedoch leer.
Diese Kuriosität entsteht, weil das << Der Operator interpretiert &b als Zeichenfolge im C-Stil und nicht als Adresse. Char-Zeiger werden vom Befehl << als nullterminierte Zeichenfolgen interpretiert. Operator.
Um dieses Problem zu beheben und die Adresse der char-Variablen anzuzeigen, können Sie den folgenden modifizierten Code verwenden:
cout << "address of char :" << (void *) &b << endl;
Hier verwenden wir a Umwandlung im C-Stil, um &b explizit in ein void * umzuwandeln. Dies weist den << Operator, um es als Adresse und nicht als Zeichenfolge zu behandeln. Eine sicherere Alternative ist die Verwendung von static_cast:
cout << "address of char :" << static_cast<void *>(&b) << endl;
Wenn die Mitgliedsvariablen int, char und string als öffentlich deklariert werden, ändert sich die Ausgabe geringfügig:
... int : something ... char : ... string : something_2
Hier ist etwas_2 immer 8 kleiner als etwas.
Dieser Unterschied entsteht, weil der Compiler das auffüllt öffentliche Mitgliedsvariablen, um sie optimal für den Speicherzugriff auszurichten. In diesem Fall wird die char-Variable wahrscheinlich auf 8 Bytes aufgefüllt, was zu einem 8-Byte-Adressenunterschied zwischen den int- und string-Variablen führt.
Das obige ist der detaillierte Inhalt vonWarum zeigt „cout' die Adresse einer „char'-Mitgliedsvariablen nicht korrekt an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!