a
- это массив short
, который, вероятно, составляет два байта в вашей системе.Вы увеличиваете char *
до этого массива на 4, поэтому вы продвигаетесь вперед на 4 байта.Поскольку элементы массива по два байта каждый, перемещение вперед на два байта является эквивалентом перемещения вперед двух элементов.
Я не уверен, является ли ваш код строго допустимым, поскольку вы используете псевдоним char *
с помощьюshort *
.Это может быть технически законно, поскольку базовый элемент фактически равен short
, но если вы увеличили char *
на нечетную величину, а затем привели его к short *
, теперь вы делаете доступ без выравнивания.