2011-01-16 18 views
9

Quali sono i valori di default per gli array come questo:I valori di default in serie

char c[20]; 

?

BTW, ce ne sono?

+0

Correlato è che la lettura di una variabile non inizializzata porta a [comportamento non definito] (http://stackoverflow.com/questions/4259885/why-do-i-see-strange-values-when-i-print-uninitialized-variables/4259991 # 4259991). – GManNickG

risposta

3

Non definito o in linguaggio meno tecnico - casuale.

Il compilatore (almeno in modalità di debug) può impostarlo su un valore particolare per il test.

E naturalmente da una rigida interpretazione di Copenaghen della teoria dei quanti il ​​valore che ha è sia indeterminato (usato nel suo senso corretto) fino a quando non si collassa la funzione d'onda misurandola.

+0

Come detto di seguito, questo NON è indefinito. La differenza tra comportamento non definito e altre categorie di incognite è stata discussa in diverse domande SO (i migliori risultati su google quando ho cercato il collegamento successivo) e, a mio parere, la migliore spiegazione di cosa significhi in c-faq: http: //c-faq.com/ansi/undef.html (il fatto che stiamo parlando di C++ piuttosto che di C non ha molta importanza qui, e ogni programmatore dovrebbe leggere questo inserire le FAQ almeno due volte). – conio

+0

ok i valori sono definiti come indeterminati - tutti sono felici adesso? –

15

Se dichiarato in ambito namespace poi c avrà portata stoccaggio statico e sarà zero inizializzata così ogni elemento c avrà valore '\0'.

Se dichiarato in una funzione, c non verrà inizializzato. Il valore iniziale degli elementi di c sarà indeterminato.

1

Come già detto, i valori sono indeterminati. Ma, devo dire che se il tuo array è statico o globale, i valori sono inizializzati ai loro valori predefiniti, il che significa in genere che saranno inizializzati su zeri (o '\ 0' nel caso di array di caratteri).

EDIT: Come suggerito da Noah Roberts, il termine "indeterminato" è probabilmente più appropriato di "non definito" (strettamente matematicamente parlando) - quindi il suggerimento è accettato e ho cambiato il termine in "indeterminato". Ma la maggior parte di noi sono ingegneri o programmatori qui, non matematici (suppongo) e omissioni simili dovrebbero essere perdonati :))

+0

"undefined" vs. "indeterminate" sono termini C++. Possono o non possono essere termini matematici ma qualsiasi sviluppatore C++ dovrebbe essere MOLTO consapevole di loro e della differenza che si applicano a * programming * in C++. –

+1

@Noah - wow, sei un programmatore molto intelligente, sembra :) Ma, cercando le differenze tra i termini, potresti lasciare indietro la programmazione .. Comunque, penso che sia importante capirsi; Ho accettato il tuo suggerimento, l'ho scritto e non c'è alcuna necessità di discuterne. Cordiali saluti – Vladimir

+0

Va bene. Avrei ripristinato il mio -1 anche se non stavi insinuando che non fosse importante per un programmatore conoscere la differenza, qualcosa che penso sia seriamente sbagliata. –

2

Questo in NON 'indefinito'. È 'indeterminato'. I valori non sono semplicemente noti.

+0

Esiste una differenza tecnica tra indefinito e indeterminato? –

+0

@ Martin: c'è. "valore indeterminato" è un termine impiegato dallo standard C++. puoi cercarlo e, cosa più importante, i bravi programmatori C++ sanno cosa intendi quando usi quel termine."valore non definito" non è un termine del genere: non standard, non ben noto. –

+0

+1 per downvote drive-by anonimo. non è bene che SO attiri così tante persone di quel tipo, cosa si può fare?

Problemi correlati