Inicialización de arreglos en C++

4 minutos de lectura

Inicializacion de arreglos en C
eli

es esta forma de inicializar una matriz a todos los 0

char myarray[ARRAY_SIZE] = {0} soportado por todos los compiladores? ,

si es así, ¿hay una sintaxis similar a otros tipos? por ejemplo

bool myBoolArray[ARRAY_SIZE] = {false} 

  • apuesto buen dinero false es lo mismo que 0 (de lo contrario if(false) no se evaluaría como falso), por lo que lo que tiene probablemente funcionará en el 99% de los compiladores. No puedo estar seguro sobre el otro 1% hasta que citemos el estándar.

    – Chris Lutz

    17 dic. 2009 a las 09:24

  • Sé que en C, int a[10] = { 1, 2, 3 }; establecerá a[3]..a[9] a 0, (“se inicializa implícitamente igual que los objetos que tienen una duración de almacenamiento estática”). ¿Es esto cierto para C++?

    – Alok Singhal

    17 dic. 09 a las 09:36

  • Sí, lo hace. Si no fuera cierto para C++, entonces C++ no sería ni remotamente compatible con versiones anteriores de C.

    – Chris Lutz

    17 dic. 09 a las 09:46

  • false no es lo mismo que 0pero en {0} el 0 se convierte en falsey en (para C++) {} ni siquiera tiene que preocuparse por las conversiones: se inicializa para false o 0 o puntero nulo o cualquier otro valor predeterminado sensible al tipo.

    – Johannes Schaub – litb

    17 dic. 09 a las 13:04

Inicializacion de arreglos en C
Hormiga

Sí, todos los compiladores de C++ admiten esta forma de inicialización. Es una parte del lenguaje C++. De hecho, es un modismo que llegó a C++ desde el lenguaje C. en lenguaje C = { 0 } es un idiomático inicializador de cero universal. Esto es también casi el caso en C++.

Como este inicializador es universal, por bool array realmente no necesita una “sintaxis” diferente. 0 funciona como un inicializador para bool escriba también, así que

bool myBoolArray[ARRAY_SIZE] = { 0 };

está garantizado para inicializar toda la matriz con false. Así como también

char* myPtrArray[ARRAY_SIZE] = { 0 };

garantizado para inicializar toda la matriz con punteros nulos de tipo char *.

Si cree que mejora la legibilidad, ciertamente puede usar

bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };

pero el punto es que = { 0 } variante te da exactamente el mismo resultado

Sin embargo, en C++ = { 0 } podría no funcionar para todos los tipos, como los tipos de enumeración, por ejemplo, que no se pueden inicializar con integral 0. Pero C++ admite la forma más corta

T myArray[ARRAY_SIZE] = {};

es decir, sólo un par vacío de {}. Esto inicializará por defecto una matriz de cualquier tipo (suponiendo que los elementos permitan la inicialización predeterminada), lo que significa que para los tipos básicos (escalares) toda la matriz se inicializará correctamente en cero.

  • y en c++ 0x podrás inicializar algo como esto

    – jk.

    17 dic. 09 a las 09:37

  • En mi compilador (qt Creator 2.4.1 – qt versión 4.8.0) si escribo bool myBoolArray[ARRAY_SIZE] = { false }; la matriz se inicializa en falso, pero si escribo bool myBoolArray[ARRAY_SIZE] = { true }; solo el primer elemento se establece en verdadero, mientras que todo lo demás es falso. ¿Alguna explicación?

    – codificador novato

    30 jun.


  • codificador @rookie: ¿Explicación de qué exactamente? ¿Qué esperas que suceda? En C++, si parcialmente inicializar un bool matriz, el resto se inicializa en cero para usted. Esa es la forma como es.

    – Ant

    30 jun.

  • @AndreyT Bien, pero encuentro este comportamiento al menos contrario a la intuición. Si no inicializo, como bool myBoolArray[ARRAY_SIZE];, la matriz contiene legítimamente valores aleatorios, por lo tanto, no habría esperado que una inicialización pudiera devolver una matriz con diferentes valores. Eso es todo.

    – codificador novato

    01 jul.

  • @AndreyT: claro, pero nunca hubiera pensado que la avalancha hubiera sido diferente del primer elemento 😉 De todos modos, ¡gracias por la información!

    – codificador novato

    02 jul.

Tenga en cuenta que ‘=’ es opcional en la sintaxis de inicialización universal de C++ 11, y generalmente se considera un mejor estilo para escribir:

char myarray[ARRAY_SIZE] {0}

  • Como entender char myarray[ARRAY_SIZE] {0}? Inicie cada elemento de myarray por ARRAY_SIZE ¿veces?

    – John

    09 oct.

1644342067 48 Inicializacion de arreglos en C
jasonline

Sí, creo que debería funcionar y también se puede aplicar a otros tipos de datos.

Sin embargo, para las matrices de clase, si hay menos elementos en la lista de inicializadores que elementos en la matriz, se usa el constructor predeterminado para los elementos restantes. Si no se define un constructor predeterminado para la clase, la lista de inicializadores debe estar completa, es decir, debe haber un inicializador para cada elemento de la matriz.

Puede declarar la matriz en C++ de este tipo de formas. Si conoce el tamaño de la matriz, debe declarar la matriz para: entero: int myArray[array_size];
Doble: double myArray[array_size];
Char y cadena: char myStringArray[array_size];
La diferencia entre char y string es la siguiente

char myCharArray[6]={'a','b','c','d','e','f'};
char myStringArray[6]="abcdef";

Si no conoce el tamaño de la matriz, debe dejar la matriz en blanco como se muestra a continuación.

entero: int myArray[array_size];

Doble: double myArray[array_size];

.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad