Heim > Backend-Entwicklung > C++ > Warum wird die Adresse einer Char-Variablen in C nicht korrekt angezeigt?

Warum wird die Adresse einer Char-Variablen in C nicht korrekt angezeigt?

Mary-Kate Olsen
Freigeben: 2025-01-03 19:02:43
Original
813 Leute haben es durchsucht

Why Doesn't the Address of a Char Variable Display Correctly in C  ?

Warum werden die Adressen von Char-Daten nicht angezeigt?

Berücksichtigen Sie diesen Code:

class Address {
public:
    int i;
    char b;
    string c;
    
    void showMap();
};

void Address::showMap() {
    cout << "address of int    : " << &i << endl;
    cout << "address of char   : " << &b << endl;
    cout << "address of string : " << &c << endl;
}
Nach dem Login kopieren

Beim Ausführen dieses Codes , stellen Sie möglicherweise fest, dass die Adresse der char-Variablen „b“ nicht in der Ausgabe angezeigt wird. Stattdessen sehen Sie einen leeren Bereich. Warum passiert das?

Der Grund liegt darin, wie der Adressenoperator (&) mit verschiedenen Datentypen funktioniert. Bei Anwendung auf eine char-Variable &b erhalten Sie einen char-Zeiger, d. h. char *.

Standardmäßig ist der Ausgabeoperator << interpretiert dieses Zeichen* als Zeichenfolge im C-Stil und versucht, eine Zeichenfolge auszugeben. In diesem Fall möchten wir jedoch nur die Adresse der char-Variablen anzeigen, nicht ihren Wert.

Um dieses Problem zu beheben, können Sie den folgenden Ansatz verwenden:

cout << "address of char   : " << (void *) &b << endl;
Nach dem Login kopieren

Hier wandeln wir die Adresse von b in void * um, bevor wir sie mit dem Ausgabeoperator verwenden. Dadurch wird sichergestellt, dass der Operator es als Zeiger auf einen Speicherort und nicht als Zeichenfolge behandelt.

Warum ist der Unterschied zwischen Adressen 8?

Wenn Sie das machen Wenn Sie die Mitgliedsvariablen „int“, „char“ und „string“ öffentlich machen, beobachten Sie möglicherweise ein weiteres interessantes Verhalten. Der Unterschied zwischen den Adressen von „int“ und „string“ beträgt durchweg 8. Dies liegt daran, dass:

  • Die Standardausrichtung für int auf den meisten Architekturen beträgt 4 Bytes.
  • Die Standardeinstellung Die Ausrichtung für char beträgt 1 Byte.
  • Die Standardausrichtung für string beträgt 4 Bytes.

Wenn die Der Compiler weist den Klassenmitgliedern Speicher zu, und zwar auf eine Weise, die sie an ihren jeweiligen Grenzen ausrichtet. In diesem Fall belegt die char-Variable „b“ ein einzelnes Byte, sodass 3 Bytes ungenutzter Speicherplatz übrig bleiben. Auf dieses Leerzeichen folgt dann die Zeichenfolgenvariable „c“, die sich an der nächsten 4-Byte-Grenze ausrichtet.

Als Ergebnis beträgt der Unterschied zwischen den Adressen von „&c“ und „&b“ 1 ( für 'b') 3 (für ungenutzten Platz) 4 (für die 4-Byte-Ausrichtung von 'c') = 8.

Das obige ist der detaillierte Inhalt vonWarum wird die Adresse einer Char-Variablen in C nicht korrekt angezeigt?. 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