Короткий ответ
Адрес указателя будет увеличен на sizeof(T)
, где T
- тип, на который указывает. Таким образом, для int
указатель будет увеличен на sizeof(int)
.
Почему?
Ну, в первую очередь, стандарт требует этого. Причина, по которой это поведение полезна (кроме совместимости с C), заключается в том, что, когда у вас есть структура данных, которая использует непрерывную память, например массив или std::vector
, вы можете перейти к следующему элементу массива, просто добавив один к указателю. Если вы хотите перейти к n-му элементу в контейнере, вы просто добавите n.
Возможность писать firstAddress + 2
намного проще, чем firstAddress + (sizeof(T) * 2)
, и помогает предотвратить ошибки, возникающие у разработчиков, предполагающих sizeof(int)
4 (это может быть не так) и писать код, как firstAddress + (4 * 2)
.
На самом деле, когда вы говорите myArray[4]
, вы говорите myArray + 4
. Это причина, по которой индексы массивов начинаются с 0; вы просто добавляете 0, чтобы получить первый элемент (т. е. myArray указывает на первый элемент массива) и n, чтобы получить n-й.
Что делать, если я хочу переместить один байт за раз?
sizeof(char)
гарантированно будет иметь один байт, поэтому вы можете использовать char*
, если хотите переместить один байт за раз.