2011-09-22 11 views
5

está el código aquí:No entiendo la salida de este programa en C

#include <stdio.h> 

int main (void) 
{ 
    int value[10]; 
    int index; 

    value[0] = 197; 
    value[2] = -100; 
    value[5] = 350; 
    value[3] = value[0] + value[5]; 
    value[9] = value[5]/10; 
    --value[2]; 

    for(index = 0; index < 10; ++index) 
     printf("value[%i] = %i\n", index, value[index]); 
    return 0; 
} 

Aquí está la salida cuando compilación:

value[0] = 197 
value[1] = 0 
value[2] = -101 
value[3] = 547 
value[4] = 0 
value[5] = 350 
value[6] = 0 
value[7] = 0 
value[8] = 1784505816 
value[9] = 35 

No entiendo por qué el valor [8] devuelve 1784505816? ¿No se supone que el valor [8] es be = value [6] = value [7] = 0? Por cierto, compilo el código a través de gcc bajo Mac OS X Lion.

Respuesta

20

value[8] nunca se inicializó, por lo tanto, su contenido no está definido y puede ser cualquier cosa.

Lo mismo se aplica a value[1], value[4], value[6] y value[7]. Pero simplemente resultaron ser cero.

+8

Pero si usa 'int value [10] = {};', entonces se inicializarán en cero. –

+5

@ ChrisJester-Young: Quiere decir '{0}'. Esta es una pregunta en C –

+0

@CharlesBailey: +1 Guau, buena idea. Veo que '{}' es una extensión de gcc (y al compilar con '-pedantic', aparece un mensaje de" advertencia: ISO C prohíbe llaves de inicialización vacías "). (Es muy tarde para mí para editar mi comentario ahora, ¡ay!) –

6

Los objetos con duración de almacenamiento automática declarada sin inicializador tienen valores indeterminados hasta que se asignan. Técnicamente, provoca comportamiento indefinido para utilizar el valor (por ejemplo, impresión int) de un objeto que tiene un valor indeterminado.

Si desea inicializar la matriz a cero, debe proporcionar un inicializador. P.ej.

int value[10] = {0}; 
+0

+1 Por usar el término * indeterminado valor*. – Nawaz

Cuestiones relacionadas