Приведение к «короткому» происходит после назначения. То, что вы хотите:
*(short*)(pointer+6) = 42;
Кстати, остерегайтесь проблем с псевдонимами. В этом случае вы, вероятно, в порядке, поскольку предполагается, что символы могут иметь псевдонимы (правка: я исправлен; этот пример нарушает строгое псевдонимы, если фактический тип этих данных не является «коротким»). Но в целом вы должны быть очень осторожны в случаях, когда вы приводите один тип указателя к другому. Google "строгий псевдоним" для получения дополнительной информации.