Re: azzerare array

Messaggioda hamming_burst » 02/02/2012, 22:42

apatriarca ha scritto:No, non c'è una svista. Semplicemente non mi riferivo alla riga subito precedente ma a main() senza int. Nei nuovi standard non è più permessa la dichiarazione di una funzione senza specificare il tipo di ritorno.

ah ok, così ha più senso.

Con static storage duration intendo semplicemente riferirmi a variabili che sono globali o specificate come static all'interno di una funzione e che quindi esistono per tutta la durata dell'esecuzione del programma. Che siano specificati nel selettore BSS nello standard ELF non ha niente a che fare con lo standard C. Lo standard C non è legato neanche lontanamente a ELF. Nei casi che ho specificato, lo standard C afferma che, se la variabile non è inizializzata, allora è inizializzata con "zero" (l'equivalente di zero nei vari tipi). Per azzerare quindi un array globale o dichiarato come statico all'interno di una funzione non è necessario scrivere codice. Se invece la variabile è locale, se non è inizializzata, può avere qualsiasi valore.

Sì certo sono standard diversi. Ma più mi riferivo al comportamento ("semantico"), le variabili inserite nel segmento BSS sono garantite essere inizializzate, ma hai ragione a differenziare.
"Un giorno tutti noi sciocchi saremo morti e allora i vivi andranno avanti. ... tutti gli uomini saranno fratelli e nessuno se ne starà al sole in panciolle a farsi nutrire dai suoi compagni"
[Jack London]

HOFL...che stress!!
Avatar utente
hamming_burst
Moderatore
Moderatore
 
Messaggi: 2266
Iscritto il: 04/07/2009, 10:53

Re: azzerare array

Messaggioda valentina92 » 03/02/2012, 09:41

Ok, ho corretto %d con %f sul printf e l'array viene azzerato anche con il codice che avevo scritto io, quindi vale come nel caso unidimensionale? Perchè questo array non è statico, subirà delle modifiche nel corso del programma, quindi non viene inizializzato automaticamente a 0...e quindi, mettendo campo[100][100]={0} non ho dato 0 solo alla prima posizione, ma a tutte, no?
Poi, forse il C che ci hanno insegnato è la versione precedente, perchè si usa scrivere:

main ()

senza il tipo davanti.
valentina92
Junior Member
Junior Member
 
Messaggi: 205
Iscritto il: 13/11/2011, 13:01

Re: azzerare array

Messaggioda apatriarca » 03/02/2012, 12:10

Sì, come ho detto il C89 è ancora il più diffuso nonostante siano passati più di 10 anni da quando è stato sostituito con un nuovo standard. Per cui è abbastanza normale che ti sia stato insegnato quello standard del C. Sinceramente credo comunque che in questo caso, aggiungere i 4 caratteri per scrivere int e uno spazio, non sia un grosso sforzo e si rende il codice più compatibile con le nuove versione del C e con il C++.

Credo che tu abbia frainteso il significato di statico. Non significa che è costante, solo che esiste e può essere usato per tutta la durata del programma. Era giusto parlarne perché in questo caso, come ho detto, l'azzeramento dell'array è automatico. Negli altri casi invece è necessario inizializzare l'array, ma se lo si vuole azzerare è sufficiente scrivere in pratica {} o {0}, in quanto, in presenza di una lista incompleta di valori, il resto viene azzerato. Per cui campo[100][100] = {0} azzera tutte le posizioni come anche campo[100][100] = {} o campo[100][100] = {0,0,0} o ...
apatriarca
Moderatore
Moderatore
 
Messaggi: 2124
Iscritto il: 08/12/2008, 20:37
Località: Torino

Re: azzerare array

Messaggioda valentina92 » 03/02/2012, 13:05

Capito, adesso è tutto chiaro. Grazie mille!
valentina92
Junior Member
Junior Member
 
Messaggi: 205
Iscritto il: 13/11/2011, 13:01

Precedente

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti