tengo el siguiente programa:Cuando resta direcciones de memoria, ¿por qué el resultado es más pequeño de lo que esperaba?
#include <iostream>
struct X
{
int a;
float b;
} x[10], *p1, *p2;
int main(int argc, char *argv[])
{
p1 = &x[1];
p2 = &x[5];
int i = p2 - p1;
std::cout << i << std::endl;
}
puedo visualizar el diseño X
's en la memoria, 10 cajas que contienen un int
y una float
, p1
señalarán al comienzo de la segunda caja (x[1]
) y p2
señalador al comienzo de la sexta caja (x[5]
):
X 0 1 2 3 4 5 6 7 8 9
_______________________________
b |__|__|__|__|__|__|__|__|__|__|
a |__|__|__|__|__|__|__|__|__|__|
| |
| |
p1 p2
es mi gráfico correcto? Si es así, ¿por qué es el resultado de i
4?
¿Tiene algunas dificultades para entender la resta de dos direcciones?
Has etiquetado esta pregunta 'c', pero usas' cout' en tu ejemplo, que en su lugar es C++. ¿Qué estás usando? –
Sí, supongo que es una pregunta en C, pero usé cout por simplicidad, supongo. – Kobe
@DanielPryden No hará una diferencia en la respuesta, ¿o sí? – Szabolcs