Ответ 1
q
является указателем на char
. Другими словами, он имеет тип char *
.
Он инициализируется с помощью выражения new char[1024]{}
, который динамически выделяет массив char
и нуль инициализирует их. Если это не удастся, будет выбрано исключение.
q
будет указывать на первый char
в динамически распределяемом массиве. Это не массив.
Это не то же самое, что
char * q = [0,0,....]//до 1024
поскольку это недопустимый синтаксис. Это также не эквивалентно
char* q = {0,0,....}; // 1024 zeros in initialiser
поскольку q
является указателем и не может быть инициализирован набором значений. Это ближе (нетто) к эффекту
char *q = new char[1024]; // dynamically allocates chars uninitialised here
std::fill(q, q + 1024, '\0');
за исключением того, что символы инициализируются нулем, а не сначала не инициализируются, а затем перезаписываются нулями (и, конечно же, до компилятора зависит, как он инициализирует символы).