У меня есть следующая программа:
#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;
}
Я могу визуализировать макет X
в памяти, 10 блоков содержащие int
и float
, p1
будет указывать на начало второго блока ( x [1]
) и p2
, указывающий на начало 6-го поля ( x [5]
):
X 0 1 2 3 4 5 6 7 8 9
_______________________________
b |__|__|__|__|__|__|__|__|__|__|
a |__|__|__|__|__|__|__|__|__|__|
| |
| |
p1 p2
Правильный ли мой рисунок? Если да, то почему результат i
4?
Есть некоторые трудности с пониманием вычитания двух адресов?