В книге "Понимание и использование указателей С" Ричарда Риса говорится на стр. 85,
int vector[5] = {1, 2, 3, 4, 5};
Код, сгенерированный
vector[i]
, отличается от кода, генерируемого*(vector+i)
.vector[i]
нотацииvector[i]
генерирует машинный код, который начинается с вектора местоположения, перемещает позицииi
из этого местоположения и использует его содержимое. Обозначение*(vector+i)
генерирует машинный код, который начинается сvector
местоположения, добавляетi
к адресу, а затем использует содержимое по этому адресу. Хотя результат тот же, сгенерированный машинный код отличается. Эта разница редко имеет значение для большинства программистов.
Вы можете увидеть отрывок здесь. Что означает этот отрывок? В каком контексте какой-либо компилятор генерирует для этих двух разных кодов код? Есть ли разница между "перемещением" от базы и "добавлением" к базе? Мне не удалось заставить это работать на GCC - генерировать разные машинные коды.