que programacion declarar declara como caracteres cadenas arreglos arreglo array c arrays initialization

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.