programacion - que es un array en java
Inicializando una matriz multidimensional:{0} versus{{{0}}} (3)
En el código C que estoy analizando, hay una gran cantidad de arreglos multidimensionales (estructura) que se inicializan con un número diferente de corchetes, por ejemplo, {{0}}
o {{{0}}}
.
Sin embargo, reemplazarlos por {0}
también funciona perfectamente.
¿Hay una diferencia (funcional) entre el uso de uno o más conjuntos de paréntesis ( {}
)?
No, no hay diferencia funcional. El estándar C permite omitir {}
intermedio. En particular, el formulario { 0 }
es un inicializador que puede utilizarse para todos los tipos de datos.
Solo para reiterar lo que Jens ya ha dicho, {0}
funciona para cualquier tipo. Es el "inicializador universal de cero" en C. Consulte el borrador de C11, 6.7.9 Inicialización .
Por lo tanto, para inicializar una matriz 3D se puede usar {0}
o {{{0}}}
. Personalmente usaría {0}
ya que es más fácil escribir y leer y funciona para cada tipo. Eso significa que, las siguientes son todas las inicializaciones válidas:
int main(void)
{
int x = {0,};
int *p = {0,};
int *q = {0};
int arr[3][3][3][3] = {0};
}
Y lo que es más importante, si tiene un tipo desconocido / opaco, por ejemplo, de bibliotecas de terceros, entonces la única forma portátil de inicializarlos es utilizando {0}
. Cualquier otra forma de memset()
cero (como usar memset()
o directamente some_type_t state = 0;
) requeriría algún conocimiento interno del tipo involucrado y el riesgo de no ser portátil.
Tiene dos opciones: ya sea { 0 }
, que funciona para cualquier tipo agregado o de unión y cero inicializa a cada miembro, o usando la forma correcta que debe corresponder a todos los miembros correctamente.