Cuando está en bucle, la dirección de la memoria no se muestra secuencialmente mientras se salta la memoria intermedia

Estoy tratando de ejecutar una secuencia de memoria y mostrarla en la ventana de comandos. Aquí está el código:

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

Producción:

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

Pregunta: En la salida, ¿no se supone que la dirección de addr[1] es 002AF949 en lugar de 002AF94C? ¿Por qué se saltan las direcciones de memoria 002AF49, 002AF4A, 002AF4B y luego se muestra la dirección addr[1] como 002AF94C? Lo mismo sucede con addr[2] también.

¿Por qué el puntero salta estas direcciones intermedias de 32 bits cuando se incrementa?

Respuestas (2)

Dado que ise declara como intse necesitarán 4 bytes para almacenar cada valor de i. Dado que cada dirección corresponde a un solo byte, se necesitarán 4 ubicaciones para almacenar un archivo int.

En tu caso,

Tomará rango de memoria 002AF948 - 002AF94Bpara almacenar 0 ( 0x00000000)

Tomará rango de memoria 002AF94C - 002AF94Fpara almacenar 1 ( 0x00000001)

Etcétera...

pero cada dirección como 002AF948 es de 32 bits, ¿verdad? ¡Así que una transición de 002AF948 a 002AF94B es de 128 bits!
¿Por qué tomará un rango de memoria de 128 bits?
@DigitalGeeK Nop. Cada dirección almacena 1 byte. Entonces, un rango de direcciones 002AF948 to 002AF94Bpuede almacenar solo 32 bits. Para almacenar 128 bits, necesita 16 ubicaciones de memoria. Entonces, un rango de direcciones 002AF948 to 002AF957puede almacenar 128 bits.

Cuatro bytes son de 32 bits ya que un byte es (normalmente) de 8 bits.

En el pasado ha habido algunas excepciones exóticas a la regla de 8 bits por byte, pero no creo que existan más.

¡Qué! Siempre enseñé que un byte = 8 bits.