std::cout << (void*) &charArray[0];
Существует перегрузка operator<<
для char*
, которая пытается вывести строку с нулевым символом в конце, на которую, по вашему мнению, указывает ваш указатель на первый символ.Но не все массивы char - это строки с нулевым символом в конце, отсюда и мусор.