Inkrementieren eines Int-Zeigers: Warum das 4-Byte-Inkrement?
Bei der Arbeit mit Zeigern kann es intuitiv sein, zu erwarten, dass das Inkrementieren eines Der int-Zeiger würde seinen Wert um 1 Byte erhöhen, wie es bei Arrays der Fall ist. In der Praxis erhöht das Inkrementieren eines int-Zeigers seinen Wert jedoch tatsächlich um 4 Bytes.
Der Grund für die 4-Byte-Inkrementierung
Der Grund für dieses Verhalten liegt in der Größe eines ganzzahligen Datentyps. Ein int belegt normalerweise 4 Byte Speicher. Wenn ein int-Zeiger nur um 1 Byte erhöht würde, würde dies dazu führen, dass er auf eine partielle Ganzzahl zeigt, was unsinnig wäre.
Das Zeigerinkrement verstehen
Zu Betrachten Sie zur Veranschaulichung die folgende Speicherdarstellung:
[...| 0 1 2 3 | 0 1 2 3 | ...] [...| int | int | ...]
Hier belegt jedes int 4 Bytes. Wenn ein int-Zeiger um 1 erhöht wird, ist es logischerweise sinnvoll, dass er zum nächsten 4-Byte-Abschnitt wechselt, wie unten gezeigt:
[↓ ] [...| 0 1 2 3 | 0 1 2 3 | ...] [...| int | int | ...]
Dadurch wird sichergestellt, dass der Zeiger weiterhin auf eine gültige Ganzzahl zeigt.
Zugriff auf einzelne Bytes
Wenn der Bedarf besteht, auf einzelne Bytes einer Ganzzahl zuzugreifen, können Sie kann einen char-Zeiger verwenden. Da char immer eine Größe von 1 Byte hat, können Sie einen char*-Zeiger verwenden, um jeweils ein Byte zu erhöhen und auf die entsprechenden Bytes einer Ganzzahl zuzugreifen.
Beispiel:
int i = 0; int* p = &i; char* c = (char*)p; char x = c[1]; // access the second byte of the integer
Zusätzlicher Hinweis:
Es ist wichtig, sich daran zu erinnern Das Erhöhen eines void*-Zeigers ist nicht zulässig, da void ein unvollständiger Typ ist und keine definierte Größe hat.
Das obige ist der detaillierte Inhalt vonWarum fügt das Erhöhen eines ganzzahligen Zeigers 4 Bytes statt 1 hinzu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!