Когда я вычитаю адреса памяти, почему результат меньше, чем я ожидал?

У меня есть следующая программа:

#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?
Есть некоторые трудности с пониманием вычитания двух адресов?

8
задан Rob Kennedy 2 December 2011 в 15:10
поделиться