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

1

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

Salida:

 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é omitir las direcciones de memoria 002AF49, 002AF4A, 002AF4B y luego mostrar la dirección addr [1] como 002AF94C? Lo mismo ocurre con addr [2] también.

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

    
pregunta PsychedGuy

2 respuestas

3

Dado que i se declara como int , se 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 int .

En tu caso,

Tomará el rango de memoria 002AF948 - 002AF94B para almacenar 0 ( 0x00000000 )

Tomará el rango de memoria 002AF94C - 002AF94F para almacenar 1 ( 0x00000001 )

Y así sucesivamente ...

    
respondido por el nidhin
1

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 creo que ya no existen.

    
respondido por el auchmonoabspielbar

Lea otras preguntas en las etiquetas