на практически любой платформе (например, один с помощью ASCII), поведение не определено. Итак, ни один из ответов не верен.
abc+abc[3]-abc[4]
Это выражение равно
abc + 'r' - 'o'
значения символьных констант зависит от реализации; предполагая систему ASCII, где r
и o
являются 0x6f и 0x72 соответственно, abc + 0x6f
находится вне границ массива abc
, что приводит к неопределенному поведению.Обратите внимание, что последующее вычитание, возвращающее результат обратно в границы, не меняет этого; как только достигнуто, невозможно восстановить из неопределенного поведения.
Тем не менее, результат, вероятно, будет такой же, как abc + ('r' - 'o')
, который, в системе ASCII, является abc + (0x6f - 0x72)
, который, в свою очередь, является abc + 3
и, таким образом rogramming
выводится, как сообщалось в вопросе.
И почему это нарушает ваши ожидания? – Carcigenicate
Что вы пытаетесь сделать? – teppic
@Carcigenicate Потому что abc [3] и abc [4] должны давать ошибку, поэтому меня путают, если она конкатенирована или что-то еще происходит. – reaper1