Heim > Backend-Entwicklung > C++ > Warum zeigt „cout' die Adresse einer „char'-Mitgliedsvariablen nicht korrekt an?

Warum zeigt „cout' die Adresse einer „char'-Mitgliedsvariablen nicht korrekt an?

Barbara Streisand
Freigeben: 2025-01-03 14:36:39
Original
382 Leute haben es durchsucht

Why Doesn't `cout` Display the Address of a `char` Member Variable Correctly?

Warum wird die Adresse von Char-Daten nicht angezeigt?

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 ;
}
Nach dem Login kopieren

Erwartungsgemäß sollte die Ausgabe angezeigt werden die Adressen der Mitgliedsvariablen int, char und string. Die Adresse der char-Variablen b bleibt jedoch leer.

Grund

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.

Lösung

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

Eine weitere interessante Beobachtung

Wenn die Mitgliedsvariablen int, char und string als öffentlich deklariert werden, ändert sich die Ausgabe geringfügig:

  ... int    :  something 
  ... char   :   
  ... string :  something_2
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage