Выбор ответа Senior Указатели и ссылки обновлено

Указатель за конец массива

Вопрос

Дано int a[5];. Какое действие уже является неопределённым поведением?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Вычислить a + 6. Арифметика указателей определена только в пределах массива и для позиции «один за последним». a + 6 выходит за эти пределы, и UB возникает уже при вычислении, без разыменования. - a + 5 разрешено: это end()-позиция, её можно сравнивать и…

Варианты ответа

  1. Вычислить a + 6правильный ответ
  2. Вычислить a + 5
  3. Сравнить a + 5 == a + 5
  4. Вычислить (a + 5) - a

Разбор

Арифметика указателей определена только в пределах массива и для позиции «один за последним». a + 6 выходит за эти пределы, и UB возникает уже при вычислении, без разыменования.

  • a + 5 разрешено: это end()-позиция, её можно сравнивать и вычитать, но нельзя разыменовывать.
  • Сравнение и разность для указателей в пределах [a, a + 5] корректны, разность равна 5.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме