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