Newsgroup: it.comp.lang.c++
Titolo: Dubbio su (ehm) array

Ciao a tutti :-)
Ho un dubbio che forse un dubbio non è, in quanto ho gia verificato
"empiricamente" la questione, però voglio essere sicuro...
se dichiaro:
<CODE>
const int DIM=10;
int array[DIM];
</CODE>
l'array avrà 11 "entrate", e non dieci, poichè si inizia a contare da 0,
giusto?
Giusto! (cit.) ;-)
Il fatto che mi ha un po' destabilizzato è che a lezione il professore ha
(ripetutamente, non credo sia un errore quindi) dichiarato array come ho
fatto io sopra, per poi però utilizzarli come se avessero DIM-1 elementi;
mi spiego meglio:
- dichiaro array[DIM], con DIM=10, quindi array ha 11 elem.
- agisco sull'array con un ciclo for (per esempio):
        for (int i=0; i<DIM; i++)
            //[...]
  quindi arrivando a i<DIM, arrivo a DIM-1, e considero l'array come se
avesse 10 elementi, e non 11.
La domanda (finalmente) quindi è: è un fatto di comodità agire così?
O è un errore?
In effetti dichiarare la costante DIM = al valore che si ha in mente è +
immediato (ma anche no) (mi servono 10 elementi? DIM=10), ma non è
fondamentalmente scorretto?
Qual'è il vostro parere?
Ciao, spero di non avervi annoiato eccessivamente ;-)) , sav
--
sav(at)
despammed.com

 Ciao, spero di non avervi annoiato eccessivamente ;-)) , sav
Figurati! CIAO


No figurati, magari ti ho annoiato io :)
P.S.: l'array ha 10 elementi :-P

Giusto! (cit.) ;-)
No sbagliato. Purtroppo questa stortura fra valore
indicato nella dichiarazione e dimensione effettiva
e' una cosa che esiste credo solo in BASIC.
In C/C++ se dichiari int x[10]; ci sono 10 elementi,
numerati da 0 a 9.
Andrea

 P.S.: l'array ha 10 elementi :-P
Ma quanti elementi ha l'array?? ;-))
Thx
--
sav(at)
despammed.com

 ha scritto nel messaggio
news:ROL2a.234018$AA2.9...@news2.tin.it...
[CUT]
Rispondo a (e ringrazio) tutti quelli che hanno risposto.
Ho capito l'errore, in cui sono stato tirato dal fatto seguente: non so come
mai, pur dichiarando:
const int DIM=10;
int array[DIM];
se arrivo a inserire dati fino a DIM+x, e non fino a DIM-1 (ultimo posto
dell'array) , l'array si "allarga" fino a DIM+x:
<CODE>
   srand(time(NULL));
   const int DIM=10;
   int array[DIM];
   for(int i=0; i<=DIM; i++) /*faccio inserire elementi da 0 a DIM+x
compreso, con x=1 (i<=DIM, ovvero i<DIM+1). */
      array[i]=rand()%20;
   system("cls");
   cout<<"DIM = "<<DIM<<endl;
   cout<<"Stampo array[DIM]"<<endl<<endl;
   for(int i=0; i<=DIM; i++) //stampo tutti gli elementi
      cout<<"Elemento "<<i<<" = "<<array[i]<<endl;
</CODE>
Pur essendo DIM=10, quindi l'array ha 10 elementi (da 0 a 9), mi ha fatto
inserire elementi fino al 10simo posto (partendo da 0), ergo array ora ha 11
elementi .
Questo mi ha portato a perdere la bussola sulla dimensione dell'array, su
cui ormai ero abbastanza sicuro...
Grazie cmq, ora č tutto chiaro, sav.
 --
 sav(at)
despammed.com

 cui ormai ero abbastanza sicuro...
Hai solo scritto in memoria non allocata... Segmentation Fault molto 
probabile in casi simili... 
-- 
Luc.

 dell'array) , l'array si "allarga" fino a DIM+x:
Il motivo e' molto semplice:
l'array non prevede un controllo sull'indice
quindi tu puoi accedere in lettura a tutti i valori
che vuoi, anche a array[100000].
Il problema e' che cosi' facendo stai leggendo (o peggio scrivendo)
in delle zone di memoria che o non appartengono al tuo programma o
contengono altri dati o istruzioni etc.etc
Insomma, rischi di fare piantare brutalmente il programma...
Il linguaggio ti permette di fare delle cose potenzialmente
errate: sta a te controllare che non stai facendo bischerate !
Comunque in C++ (perche' stai postando sul gruppo del C++) ci sono
dei modi per definire dei simil-array che si "accorgono" se qualcosa
va storto... Ma questa e' un'altra storia.
ciao,
g.

 Giusto! (cit.) ;-)
No, sbagliato. L'array ha 10 elementi, numerati da zero a nove.
Ciao,
Nicola

 Nicola

...


 Stefano

 Il vettore avrà 10 elementi.
Leggiamo i thread prima di rispondere (azz... però i thread sono OT qui) 
;) 
-- 
Luc.

 wrote


Ovvio che vector e' preferibile in questo NG, ma non arriverei a dire che
questo e' OT !
Tommy

...

Mi pare di sapere leggere discretamente.....
Siccome scrivo dal posto di lavoro usando google, il mio messaggio ci
impiega alcune ore prima di raggiungere la destinazione.
Quando ho spedito il messaggio non vi era ancora alcuna risposta.
In ogni caso mejo tardi che mai! ;-)
Ciao S.

 questo e' OT !
Se proprio vogliamo andare a spaccare il capello in quattro ( e magari
otto...) la cosa l'oggetto della discussione ha piena dignità nello standard
C++...
Bye Bye :-)
Antonio


Mi sa che non avete capito la battuta di Luc.
Rileggetela un attimo.
Maurus

 Rileggetela un attimo.
Hai ragione, non avevo capito la battuta! ;-)
Tommy

 Hai ragione, non avevo capito la battuta! ;-)
Bene, ho atteso il week-end per vedere se si capiva... ;)
-- 
Luc.