Вчера я наткнулся на пример кода от лектора университета (я даю частные уроки одному из его учеников). Я пытаюсь понять, почему и как работает этот код, но я все еще не уверен, даже после нескольких часов исследований. Вот что у меня есть:
int tab[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int* t = tab;
int i;
for (i = 0; i < 10; i++)
{
(*t++)++;
printf("%d ", tab[i]);
};
Результат:
1 2 3 4 5 6 7 8 9 10
Итак, этот код довольно прост для понимания, за исключением этой части:
(*t++)++
Я знаю, что оператор инкремента имеет приоритет над оператором косвенности, поэтому эта операция, скорее всего, будет обрабатываться как:
(*(t++))++
Учитывая, что t
является указателем, я бы сказал, что это произойдет:
t
адрес будет увеличен, поэтому он будет указывать на второй элемент в массиве tab
(индекс 1). - Теперь необходимо обработать оператор косвенности, поэтому значение второго элемента в массиве
tab
будет увеличен, потому что мы в итоге получим (*t)++
.
Теперь мой вопрос: почему все элементы tab
увеличиваются? Не следует ли пропустить первый элемент tab
(индекс 0), учитывая, что увеличение указателя происходит прямо в начале l oop?