Рассмотрим следующий фрагмент кода:
int (*p)[3];
int (*q)[3];
q = p;
q++;
printf("%d, %d\n", q, p);
printf("%d\n", q-p);
Я знаю, что арифметика указателей является разумной, то есть операция q++
продвигает q
на достаточное количество байтов вперед, чтобы указать на следующий массив из 3-х целых чисел, поэтому меня не удивляет, что первый вывод - '12, 0
', что означает, что увеличение q
увеличило его в 12.
Но второй отпечаток действительно удивляет меня. Это печатает 1!
Так зачем печатать 1 вместо 12? это просто озадачивает меня.