2011-09-22 14 views
5

Ecco il codice:Non capisco l'uscita di questo programma 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; 
} 

ecco l'output quando compilazione:

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 

Non capisco il motivo per cui il valore [8] ritorna 1.784.505,816 mila? Il valore non è [8] supposto essere = valore [6] = valore [7] = 0? A proposito, compilo il codice tramite gcc sotto Mac OS X Lion.

risposta

20

value[8] non è mai stato inizializzato, quindi il suo contenuto non è definito e può essere qualsiasi cosa.

Lo stesso vale per value[1], value[4], value[6] e value[7]. Ma sono appena arrivati ​​a zero.

+8

Ma se si utilizza 'int valore [10] = {};', quindi sarebbero zero inizializzati. –

+5

@ ChrisJester-Young: vuoi dire '{0}'. Questa è una domanda in C. –

+0

@CharlesBailey: +1 Wow, buona chiamata. Vedo che '{}' è un'estensione gcc (e quando si compila con '-pedantic', si ottiene un messaggio di avvertenza: ISO C proibisce le parentesi graffe di inizializzazione vuote). (È troppo tardi per me modificare il mio commento ora, ahimè.) –

6

Gli oggetti con durata di archiviazione automatica dichiarata senza un inizializzatore hanno valori indeterminati fino a quando non vengono assegnati. Tecnicamente, causa il comportamento non definito per utilizzare il valore (ad esempio, la stampa int) di un oggetto che ha un valore indeterminato.

Se si desidera inizializzare l'array a zero, è necessario fornire un inizializzatore. Per esempio.

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

+1 Per utilizzare il termine * indeterminato valore*. – Nawaz

Problemi correlati