Почему последняя строка печатает 2 вместо 8?

&array[0] и &array[2] по отдельности печатают правильные значения, которые являются адресами массива [0] и массива [2] соответственно. Однако, когда я вычитаю два, печатается 2 вместо 8, что является разницей двух адресов.

Какие соответствующие части стандарта C объясняют, почему вывод равен 2, а не 8?

Взято с сайта http://fabiensanglard.net/c/index.php.

#include <stdio.h>

int main() {
    int array[] = {41,1821,12213,1645,20654} ;
    int* pointer = array;

    printf("%d %d %d %d\n", sizeof array, sizeof pointer, sizeof(int*), sizeof &array[2]);
    printf("%ld %ld %ld %ld\n", sizeof array[0], sizeof &array, array[0], &array[0]);
    printf("%ld %ld %ld %ld\n", sizeof array[2], sizeof &array, array[2], &array[2]);
    printf("%d\n", (&array[2]) - (&array[0]));

}

person user2698    schedule 21.08.2018    source источник
comment
x+1 — следующая запись в массиве, на элемент которого указывает x. Вычитание работает аналогичным образом; (x+1) - x это 1 (не 4)   -  person M.M    schedule 21.08.2018