Эта декларация очень запутанна:
char* q {new char[1024]{}}; // q[i] becomes 0 for all
Является ли это "указателем на массив char" или "массив указателей char"?
Я думаю, что new char[1024]{} инициализирует массив char из 1024 элементов, каждый из которых имеет значение 0.
Итак, это то же самое, что:
char* q = [0,0,....] // until 1024
Правильно?