&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]));
}
x+1
— следующая запись в массиве, на элемент которого указываетx
. Вычитание работает аналогичным образом;(x+1) - x
это1
(не4
) - person M.M   schedule 21.08.2018%p
,sizeof
(который возвращаетsize_t
) должен быть напечатан с использованием%zu
, а вычитание двух указателей даетptrdiff_t
, который должен быть обработан с помощью%td
- person phuclv   schedule 21.08.2018