|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
[C++] Dichiarazione variabili in cicli
Ho un dubbio, ho scritto un programmino e in un punto di esso ho scritto questo:
Codice:
while(!fin->eof()){ int i; if(nf==-1){ while(CONDIZIONE){ FAI QUALCOSA (cambia il valore di nf) } i=1; }else{ cout<<i<<"\n"; for(;i<nf+1;i++) FAI QUALCOS'ALTRO i=0; } } Grazie mille, spero non sia una domanda troppo stupida... |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
la variabile i (che tra l'altro non inizializzi) viene diciamo "ricreata" ad ogni ciclo.
forse vorresti dichiararla come static int i = qualcosa; in questo modo viene definita e inizializzata una sola volta e la variabile rimane anche all'uscita dallo scope. come l'hai scritto ora il funzionamento è indefinito, visto che i non essendo inizializzato ha valore indefinito!
__________________
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Il funzionamento è indefinito, quindi il fatto che ogni volta che viene dichiarata questa venga allocata nella stessa area di memoria è anch'esso un caso? In tal caso dovrei modificare il codice, non è un problema, volevo solo capire come funzionano le cose, grazie.
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Beh, non proprio.
La dichiarazione, messa li', e' corretta. La variabile viene creata ad ogni ciclo e viene poi distrutta al completamento dello stesso. Quello che ti diceva vizzz e' corretto: quando hai creato la variabile non l'hai inizializzata. Comunque non e' una peculiarita' del fatto che la variabile l'hai dichiarata li', vale per tutte le variabili. Caso mai dovrai stare attento a non utilizzarla prima di avergli assegnato un valore, ma questo immagino che lo saprai proprio bene, e saprai che vale per qualsiasi variabile. A proposito del fatto che la variabile e' creata sempre allo stesso indirizzo (immagino intendevi questo, giusto?) e' (quasi) un caso: c'e' un motivo ben preciso, dovuto al funzionamento del compilatore, ma non dovrebbe interessarti se non per cultura personale. (se ti interessa per un motivo pratico, allora c'e' qualcosa da rivedere: probabilmente, come suggerito da vizzz, occorre cambiare la classe di memorizzazione - la durata della vita - di questa variabile)
__________________
In God we trust; all others bring data |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:21.