Dependerá de qué valor inicial quieras asignar a los valores de dicha tabla y del tipo de los mismos.
Para el caso que expones en tu ejemplo:
int a[10];
Si quieres inicializar a valores 0 tienes las siguientes opciones:
Inicialización por lista vacía
int a[10] {};
El arreglo a
recibe una lista vacía como valor inicial, esta lista vacía inicia todos sus elementos al valor por defecto del tipo del arreglo (int
), en este caso el valor es 0
... así que todos los elementos del arreglo a
obtendrán el valor 0.
Inicialización por copia de lista vacía
int a[10] = {};
El arreglo a
copia los elementos de la lista facilitada como valor inicial, al estar esta lista vacía todos sus elementos contienen el valor por defecto del tipo del arreglo (int
), en este caso el valor 0
... así que todos los elementos del arreglo a
obtendrán el valor 0.
Los compiladores actuales suelen optimizar esta inicialización de manera que se omite la copia en la mayoría de casos (realiza una inicialización del valor in situ siendo entonces equivalente a la inicialización por lista vacía); sin embargo no está garantizada la omisión de copia en otros tipos más complejos; siempre que tengas dudas de si una lista va a copiarse y quieres evitar dicha copia: usa la Inicialización por lista vacía.
Inicialización en espacio estático
static int a[10];
Los elementos estáticos son inicializados al valor por defecto incluso cuando no se les asigna un valor inicial, así que en el caso del arreglo estático a
todos sus elementos contienen el valor por defecto del tipo del arreglo (int
), en este caso el valor 0
.
En el caso de querer inicializar a valores diferentes a 0, es más complicado:
Inicialización por lista
int a[10] { 1 };
El arreglo a
recibe una lista como valor inicial, esta lista contiene un único elemento de los 10 que acepta el arreglo... lo que sucederá es que el primer elemento del arreglo obtendrá el primer valor de la lista y el resto de elementos serán inicializados al valor por defecto del tipo del arreglo (int
), que en este caso será 0
, esto sucede hasta rellenar todos los valores del arreglo:
int b[10] { 1, 1 }; // los 8 ultimos elementos contienen 0
int c[10] { 1, 1, 1, 1 }; // los 6 ultimos elementos contienen 0
int d[10] { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; // El ultimo elemento contiene 0
Inicialización por copia de lista
int a[10] = { 1 };
Sigue las mismas normas que la inicialización anterior pero copiando la lista facilitada (copia que generalmente es omitida por el compilador). Por lo tanto todos los elementos a los que no se les haya especificado valor, obtendrán el valor por defecto del tipo del arreglo (int
), en este caso el valor 0
.
Si quieres inicializar a un valor diferente al valor por defecto, deberás especificar el valor por cada uno de los elementos a inicializar; si esa es tu opción, puedes omitir el tamaño del arreglo y dejar que el compilador lo deduzca por ti:
int a[] {}; // Tamanyo 0!
int b[] { 1, 1 }; // Tamanyo 2
int c[] { 1, 1, 1, 1 }; // Tamanyo 4
int d[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; // Tamanyo 9