charArr
достаточно большой, чтобы вместить три символа, с которыми он инициализирован. Массив не может содержать никаких других символов, и в нем даже нет места для завершающего нулевого байта, чтобы сделать его правильной строкой.
Это означает, что вы пишете после конца массива. Это вызывает неопределенное поведение , которое в этом случае проявляется как неожиданный вывод.
Массив должен иметь длину не менее 6 байтов, чтобы он мог содержать дополнительные символы плюс завершающий нулевой байт длясделать это строкой. Вам также нужно добавить этот нулевой байт.
char charArr[6] = "c++";
char *pointer = charArr;
pointer+=3;
*pointer = 'q';
pointer+=1;
*pointer = 'd';
pointer+=1;
*pointer = 0;