Beim Schleifen wird die Speicheradresse beim Überspringen des Zwischenspeichers nicht sequentiell angezeigt

Ich versuche, eine Speichersequenz zu durchlaufen und im Befehlsfenster anzuzeigen. Hier ist der Code:

int addr[10];              //Address addr is 32 bit
for{int i=0 ; i<10 ; i++}
{
  int *p = &addr[i];        //Pointing to the 32 bit addresses from 0 to 9
  cout<<p<<endl;            //Display the pointed addresses
}
return 0;
 }

Ausgang:

 002AF948             //address of addr[0]
 002AF94C            //address of addr[1]
 002AF950            //address of addr[2]
 ....upto i = 9

Frage: Sollte in der Ausgabe nicht 002AF949 statt 002AF94C die Adresse von addr[1] sein? Warum werden die Speicheradressen 002AF49, 002AF4A, 002AF4B übersprungen und dann die Adresse addr[1] als 002AF94C angezeigt? Dasselbe passiert auch mit addr[2].

Warum überspringt der Zeiger diese 32-Bit-Zwischenadressen, wenn er inkrementiert wird?

Antworten (2)

Da iwird deklariert, dass int4 Bytes benötigt werden, um jeden Wert von zu speichern i. Da jede Adresse einem einzelnen Byte entspricht, werden 4 Stellen benötigt, um eine int.

In Ihrem Fall,

002AF948 - 002AF94BZum Speichern von 0 ( 0x00000000) wird Speicherbereich benötigt

002AF94C - 002AF94FZum Speichern von 1 ( 0x00000001) wird Speicherbereich benötigt

Usw...

aber jede Adresse wie 002AF948 ist 32 Bit richtig?. Ein Übergang von 002AF948 zu 002AF94B ist also 128 Bit!
Warum wird ein Speicherbereich von 128 Bit benötigt?
@DigitalGeeK Nop. Jede Adresse speichert 1 Byte. Ein Adressbereich 002AF948 to 002AF94Bkann also nur 32 Bit speichern. Um 128 Bit zu speichern, benötigen Sie 16 Speicherplätze. Ein Adressbereich 002AF948 to 002AF957kann also 128 Bit speichern.

Vier Bytes sind 32 Bit, da ein Byte (normalerweise) 8 Bit ist.

In der Vergangenheit gab es einige exotische Ausnahmen von der 8-Bit-pro-Byte-Regel, aber ich glaube nicht, dass es sie noch gibt.

Was! Ich habe immer gelehrt, dass ein Byte = 8 Bits ist.