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
Barbara StreisandOriginal
2025-01-03 14:36:39422Durchsuche

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

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;

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;

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

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!

Stellungnahme:
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