2012-10-08 83 views
13

Duplicar posibles:
C and C++ : Partial initialization of automatic structureC++ flotar la inicialización del campo

Mientras lee Code Complete, me encontré con un C++ ejemplo la inicialización del campo:

float studentGrades[ MAX_STUDENTS ] = { 0.0 }; 

no lo hice saber C++ podría inicializar la e ntire matriz, por lo que he comprobado:

#include <iostream> 
using namespace std; 

int main() { 
    const int MAX_STUDENTS=4; 
    float studentGrades[ MAX_STUDENTS ] = { 0.0 }; 
    for (int i=0; i<MAX_STUDENTS; i++) { 
     cout << i << " " << studentGrades[i] << '\n'; 
    } 
    return 0; 
} 

El programa dio los resultados esperados:

0 0 
1 0 
2 0 
3 0 

pero cambiando el valor de inicialización de 0.0 a, por ejemplo, 9.9:

float studentGrades[ MAX_STUDENTS ] = { 9.9 }; 

Dio el resultado interesante:

0 9.9 
1 0 
2 0 
3 0 

¿La declaración de inicialización establece solo el primer elemento en la matriz?

Respuesta

21

Si usa cualquier cosa que no sean llaves vacías, solo inicializa las primeras N posiciones y todas las demás se inicializan a 0. En este caso, N es la cantidad de argumentos que pasó a la lista de inicialización, es decir,

float arr1[10] = { };  // all elements are 0 
float arr2[10] = { 0 };  // all elements are 0 
float arr3[10] = { 1 };  // first element is 1, all others are 0 
float arr4[10] = { 1, 2 }; // first element is 1, second is 2, all others are 0 
+0

No olvide que puede utilizar una lista de inicialización vacía, en cuyo caso * todos los elementos * se establecen en cero. –

+0

@MarkRansom: Sí, sí, lo agregaré, gracias. –

+0

Haces que parezca que 0 es un caso especial, pero no lo es. Está configurando el primer elemento en 0 y luego el resto en 0. –

5

No, establece todos los miembros/elementos que no se han establecido explícitamente en su valor predeterminado de inicialización, que es cero para los tipos numéricos.