Ho il seguente programma:Quando sottrarre gli indirizzi di memoria, perché il risultato è più piccolo di quanto mi aspettassi?
#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;
}
I può visualizzare la layout X
s' in memoria, 10 scatole contenenti un int
e float
, p1
indicheranno all'inizio della seconda casella (x[1]
) e p2
puntamento all'inizio del 6 ° scatola (x[5]
):
X 0 1 2 3 4 5 6 7 8 9
_______________________________
b |__|__|__|__|__|__|__|__|__|__|
a |__|__|__|__|__|__|__|__|__|__|
| |
| |
p1 p2
è la mia illustrazione corretta? In caso affermativo, perché il risultato è i
4?
Hai qualche difficoltà a capire la sottrazione di due indirizzi?
Hai taggato questa domanda 'c', ma nel tuo esempio usi' cout', che invece è C++. Quale stai usando? –
Sì, immagino sia una domanda su C, ma ho usato il cout per la semplicità, immagino. – Kobe
@DanielPryden Non farà la differenza nella risposta, vero? – Szabolcs