1)devi utilizzare un for o un while?
2)questo ciclo si trova dentro al main o dentro ad una funzione?
()
1)devi utilizzare un for o un while?
2)questo ciclo si trova dentro al main o dentro ad una funzione?
()
in pratica mi è stato detto:
quando usi una struttura dinamica, utilizza sempre una variabile di supporto inizializzata a -1, che conta il numero di iterazioni,
ad esempio ho un elenco da riempire di nomi, per gestire la dinamicita, mettendo gli elementi in contiguità fisica nello stack, mi è stato detto di inizializzare la variabile di supporto sempre a -1,
mettiamo caso che i nomi da inserire siano 50,
allora dovrei fare qualcosa di questo tipo:
for (ultimo=-1; ultimo < 50-1; ultimo ++)
quello che non capisco è:
perchè devo usare il -1, e non posso fare smeplicemente
for (ultimo=0; ultimo<50; ultimo++)
dal punto di vista matematico è la stessa identica cosa, forse serve per evitare lo sfondamento del vettore in fare di ricerca, cancellazione, sostituzione?
spero di essere stato più chiaro,
Grazie ancora
Meglio se ti fai rispiegare cosa intendesse dire.
Gli array partono sempre da 0, se cicli con un -1 come valore iniziale, rischi solo un bel crash.
Nel tuo esempio è corretto partire da 0 e finire con < 50.
L'unico caso che mi venga in mente è questo.
per sfruttare l'operatore di incremento prefisso (e che francamente mi sembra una baggianata)codice:int i = -1; while (++i < 50) { array[i]; }
for (ultimo=-1; ultimo < 50-1; ultimo ++)Originariamente inviato da {-_-}
in pratica mi è stato detto:
quando usi una struttura dinamica, utilizza sempre una variabile di supporto inizializzata a -1, che conta il numero di iterazioni,
ad esempio ho un elenco da riempire di nomi, per gestire la dinamicita, mettendo gli elementi in contiguità fisica nello stack, mi è stato detto di inizializzare la variabile di supporto sempre a -1,
mettiamo caso che i nomi da inserire siano 50,
allora dovrei fare qualcosa di questo tipo:
for (ultimo=-1; ultimo < 50-1; ultimo ++)
quello che non capisco è:
perchè devo usare il -1, e non posso fare smeplicemente
for (ultimo=0; ultimo<50; ultimo++)
dal punto di vista matematico è la stessa identica cosa, forse serve per evitare lo sfondamento del vettore in fare di ricerca, cancellazione, sostituzione?
spero di essere stato più chiaro,
Grazie ancora
questo codice generera' sicuramente un errore, poiche' il primo campo al quale tentera' di accedere e' -1 e non e' valido
cmq scrivere 50-1 o 49 e' identico, ma se usi una variabile di dimensione per inizializzare l'array ha + senso scrivere "50-1"
es:
int n = 50;
char *a[n];
int i;
for (i =0; i<n-1;i++)//se metti n e basta il ciclo lavorera' sull'elemento a[n] (a[50]) che non esiste
in raltà no perchè il codice prosegue conOriginariamente inviato da duonovembre
for (ultimo=-1; ultimo < 50-1; ultimo ++)
questo codice generera' sicuramente un errore, poiche' il primo campo al quale tentera' di accedere e' -1 e non e' valido
vettore[ultimo+1]
quindi parte da 0
interessantecmq scrivere 50-1 o 49 e' identico, ma se usi una variabile di dimensione per inizializzare l'array ha + senso scrivere "50-1"
es:
int n = 50;
char *a[n];
int i;
for (i =0; i<n-1;i++)//se metti n e basta il ciclo lavorera' sull'elemento a[n] (a[50]) che non esiste
Confermo ... e' meglio che ti fai rispiegare la faccenda e la riproponi perche' cosi' come la stai dicendo, non ha nessun senso ...Originariamente inviato da {-_-}
...
interessante
dimenticavo di aggiungere (davo per scontato ed ho sbagliato) che char *a inizializza una "stringa" (+ correttamente dichiara un puntatore ad una stringa) che poi potrai inizializzare con una qualsiasi lunghezza a tua scelta, ma analogamente potevo scrivere char a[50] ma questo creava una stringa di esattamente 50 caratteri
se non avete ancora fatto i puntatori ti basti sapere che e' praticamente identico all'uso dell'array a parte il fatto che non puoi chiaramente richiamare un carattere della stringa con a[5], ma dovrai utilizzare *a++ per scorrere tra i caratteri. se ti interessa capire meglio guarda la guida di C su questo sito che e' molto buona e facilmente comprensibile
ok, penso di aver capito
consideriamo i due casi (tralascio le dichiarazioni etc)
codice:for (ultmio=-1; ultmio<4-1; ultimo ++) vettore [ultimo+1];nel caso due ottengo analizzando le varie componenti:codice:for(i=0; i<4; i++) vettore [i];
i iniziale |0|1|2|3|
-------------------------------
posizione di v |0|1|2|3|
-------------------------------
i finale |1|2|3|4|
------------------------------
con i finale = 4 esco
****************************
nel caso uno ottengo invece
ultimo iniziale |-1|0|1|2|
-------------------------------
posizione di v |0|1|2|3|
-------------------------------
ultimo finale |0|1|2|3|
-------------------------------
con ultimo finale = 3 esco
in questo secondo caso il valore ultimo coincide con la posizione di v, mentre nel primo era avanti di 1 la i finale, quindi per avere una perfetta contiguità fisica è meglio il secondo, ecco perchè mi hanno detto di inizializzarlo a -1, così ultimo rispecchia l'ultimo elemento nel vettore
***************************
credo sia così
Guarda che è perfettamente lecito usare le parentesi [] con una array nell'heap.Originariamente inviato da duonovembre
se non avete ancora fatto i puntatori ti basti sapere che e' praticamente identico all'uso dell'array a parte il fatto che non puoi chiaramente richiamare un carattere della stringa con a[5], ma dovrai utilizzare *a++ per scorrere tra i caratteri. se ti interessa capire meglio guarda la guida di C su questo sito che e' molto buona e facilmente comprensibile
mi sembra che faccia un iterazione in + di quanto dici
vado a mangiare (devo ancora pranzare e poi ti dico)