Рассмотрим следующий фрагмент кода:
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? это просто озадачивает меня.