Haber si puedes entender que es lo que pasa explicandotelo "graficamente".
Digamos que este es el segmento de memoria en el que corre tu programa
Código:
Byte No 1 2 3 4
v v v v
6000 ---> [ ][ ][ ][ ]
6004 ---> [ ][ ][ ][ ]
6008 ---> [ ][ ][ ][ ]
600C ---> [ ][ ][ ][ ]
y declaras un arreglo int de con un tamaño de 4, al cual se le asigna la direccion 6000, entonces tendrias algo asi.
Código:
int arreglo[4];
Byte No { 1 2 3 4 } => 4 bytes = 1 int
v v v v
arreglo[0] = 6000 ---> [ ][ ][ ][ ]
arreglo[1] = 6004 ---> [ ][ ][ ][ ]
arreglo[2] = 6008 ---> [ ][ ][ ][ ]
arreglo[3] = 600C ---> [ ][ ][ ][ ]
como ya te lo explicaron, El compilador pos si mismo calcula los bytes que debe recorrer cuando le agregas un valor, es decir al hacer:
Código:
arreglo[0] //Direccion de memoria 6000, equivalente a arreglo + 0
arreglo[1] //Direccion de memoria 6004, equivalente a arreglo + 1
arreglo[2] //Direccion de memoria 6008, equivalente a arreglo + 2
arreglo[3] //Direccion de memoria 600C, equivalente a arreglo + 3
Cita: entonces localidad de memoria y direccion de un registro y un dato no es lo mismo??, y si no es que es cada una?, gracias
Las localidades de memoria son los espacios en memoria donde se almacena información, para poder acceder a estas necesitamos de una direccion de memoria.
Es decir:
Código:
int arreglo[4];
arreglo[0] = 1;
arreglo[1] = 2;
arreglo[2] = 25;
arreglo[3] = -40;
Byte No { 1 2 3 4 } => 4 bytes = 1 int
v v v v
arreglo[0] = 6000 ---> [ ][ ][ ][ ] -------------> Localidades de memoria
arreglo[1] = 6004 ---> [ ][ ][ ][ ] ----------|
arreglo[2] = 6008 ---> [ ][ ][ ][ ] ----------|
arreglo[3] = 600C ---> [ ][ ][ ][ ] ----------|
^^^
|
|-------------------------------------- Direcciones de memoria
{1, 2, 25, -40} ----------> Datos