Tengo un gran array en C (no en C++ si eso supone una diferencia). Quiero inicializar todos los miembros con el mismo valor. Juraría que una vez conocí una forma sencilla de hacer esto. Podría usar memset()
en mi caso, pero ¿no hay una forma de hacerlo que esté incorporada en la sintaxis de C?
A menos que ese valor sea 0 (en cuyo caso puede omitir alguna parte del inicializador y los elementos correspondientes se inicializarán a 0), no hay una manera fácil.
Sin embargo, no hay que pasar por alto la solución obvia:
int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
Los elementos con valores perdidos se inicializarán a 0:
int myArray[10] = { 1, 2 }; // initialize to 1,2,0,0,0...
Así que esto inicializará todos los elementos a 0:
int myArray[10] = { 0 }; // all elements 0
En C++, una lista de inicialización vacía también inicializará todos los elementos a 0. Esto es no permitido con C:
int myArray[10] = {}; // all elements 0 in C++
Recuerde que los objetos con duración de almacenamiento estático se inicializarán a 0 si no se especifica un inicializador:
static int myArray[10]; // all elements 0
Y que "0" no' significa necesariamente "todo-bits-cero", por lo que usar lo anterior es mejor y más portable que memset(). (Los valores de coma flotante se inicializados a +0, los punteros a valor nulo, etc.)
Puedes hacer todo lo del inicializador estático como se detalla arriba, pero puede ser un verdadero fastidio cuando el tamaño de tu array cambia (cuando tu array se agranda, si no añades los inicializadores extra apropiados obtienes basura).
memset te da un golpe de tiempo de ejecución por hacer el trabajo, pero ningún golpe de tamaño de código hecho correctamente es inmune a los cambios de tamaño del array. Yo usaría esta solución en casi todos los casos cuando el array fuera mayor que, digamos, unas pocas docenas de elementos.
Si fuera realmente importante que el array se declarara estáticamente, escribiría un programa que lo escribiera por mí y lo haría parte del proceso de construcción.
Para inicializar tipos de datos 'normales' (como los arrays de int), puede utilizar la notación de corchetes, pero pondrá a cero los valores después del último si todavía hay espacio en el array:
// put values 1-8, then two zeroes
int list[10] = {1,2,3,4,5,6,7,8};