Выбор ответа Senior Указатели и ссылки обновлено
Указатель за конец массива
Вопрос
Дано int a[5];. Какое действие уже является неопределённым поведением?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Вычислить a + 6. Арифметика указателей определена только в пределах массива и для позиции «один за последним». a + 6 выходит за эти пределы, и UB возникает уже при вычислении, без разыменования. - a + 5 разрешено: это end()-позиция, её можно сравнивать и…
Варианты ответа
- Вычислить
a + 6правильный ответ - Вычислить
a + 5 - Сравнить
a + 5 == a + 5 - Вычислить
(a + 5) - a
Разбор
Арифметика указателей определена только в пределах массива и для позиции «один за последним». a + 6 выходит за эти пределы, и UB возникает уже при вычислении, без разыменования.
a + 5разрешено: этоend()-позиция, её можно сравнивать и вычитать, но нельзя разыменовывать.- Сравнение и разность для указателей в пределах
[a, a + 5]корректны, разность равна 5.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Повернуть матрицу, хранящуюся одним буфером
Следующий вопрос
sizeof массива-параметра
Термины по теме
Ещё по теме «Указатели и ссылки»
- Удалить узлы списка с заданными значениями
- Кольцевой буфер для логов
- const до и после звёздочки
- Откуда берутся висячие ссылки
- Сопоставьте объявление и его смысл
- nullptr против NULL в перегрузке
- Указатель «за последним»
- Что выведет: арифметика указателей и ссылки