tag songs preguntas las kpop canciones c++ pointers initializer-list

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 */ }