c++ - songs - tag de las 30 canciones
Confusa declaraciĆ³n e inicializador. (2)
Esta declaración es muy confusa:
char* q {new char[1024]{}}; // q[i] becomes 0 for all
¿Es esto un "puntero a una matriz de caracteres" o una "matriz de punteros de caracteres"?
Creo que new char[1024]{}
está inicializando una matriz de char
de 1024 elementos, cada uno con un valor de 0
.
Así que esto es lo mismo que:
char* q = [0,0,....] // until 1024
¿Correcto?
q
es un puntero a un char
. En otras palabras, es de tipo char *
.
Se inicializa utilizando la expresión new char[1024]{}
que asigna dinámicamente un conjunto de caracteres y los inicializa en cero. Si esto falla, se lanzará una excepción.
q
apuntará al primer char
en la matriz asignada dinámicamente. No es una matriz.
No es lo mismo que
char * q = [0,0, ....] // hasta 1024
ya que esa sintaxis no es válida. Tampoco es equivalente a
char* q = {0,0,....}; // 1024 zeros in initialiser
ya que q
es un puntero y no se puede inicializar a un conjunto de valores. Está más cerca en efecto (neto) a
char *q = new char[1024]; // dynamically allocates chars uninitialised here
std::fill(q, q + 1024, ''/0'');
excepto que los caracteres se inicializan a cero, en lugar de no inicializarse primero y luego se sobrescriben con ceros (y, por supuesto, depende del compilador cómo se inicializan los caracteres).
char* q {new char[1024]{}};
es igual a
char* q = new char[1024]{};
que a su vez es igual a
char* q = new char[1024] { 0, 0, 0, 0 /* 1020 more zeros */ }