Super Squirrel ha scritto:Volendo essere più precisi, secondo lo standard del linguaggio la dimensione di un array statico deve essere una costante.
Questa regola credo dipenda dal fatto che la dimensione di un array statico deve essere nota in fase di compilazione, e nel momento in cui la dimensione è una costante (utilizzando un numero, la direttiva define o lo specificatore const) essa sarà sicuramente nota. Giusto?
Giusto, quello che ho scritto è più uno pseudo-codice per far capire l'ordine delle cose.
#define
è il modo usuale di definire costanti in C.
Super Squirrel ha scritto:Invece se la dimensione fosse una variabile potrebbero esserci casi come il seguente in cui la dimensione sarebbe nota solo in fase di esecuzione:
- Codice:
int dim;
cin >> dim;
float v[dim];
Questo è quello che dicevamo sopra, infatti.
Super Squirrel ha scritto:Al di là dello standard come si comporta invece il compilatore nel seguente caso:
- Codice:
int dim = 100;
float v[dim];
La dimensione sarà nota in fase di compilazione oppure il valore 100 sarà assegnato alla variabile dim solo in fase di esecuzione? E se invece di una dichiarazione con inizializzazione ci fosse stata una dichiarazione con successiva assegnazione?
In questo caso il compilatore sa che
dim
non sarà modificata e che avrà quel valore nel momento di inizializzare l'array.
vict85 ha scritto:Personalmente non penso che il modo di fare questo tipo di cose in C sia di usare le liste. Nello stesso modo in cui implementi una lista puoi implementare un array dinamico.
Per array dinamico intendi una cosa il cui spazio di allocazione cresce secondo necessità? Questo sarebbe l'equivalente di
std::vector
, ed è un altro possibile modo di fare. Concettualmente non c'è molta differenza.
Questo è così esotico che non ne avevo mai sentito parlare XD
mklplo ha scritto:Grazie anche agli altri per le risposte,ma che vuol dire "std::vector"?
In C++ sono disponibili un gran numero di tipi di dato più sofisticati di quelli base del C. Siccome gli array/vettori/collezioni di numeri sono così comuni, il linguaggio fornisce un tipo di dato che li gestisce in maniera automatica. Questo tipo di dato si chiama
std::vector
. Se stai ancora imparando, è meglio che ti faccia le ossa con array e implementazioni di basso livello per capire bene cosa succede.
mklplo ha scritto:Pechè poi devo imporre un valore massimo all'array?
Perché il computer deve sapere in anticipo quanta ram mettere da parte per gli elementi di quell'array.
mklplo ha scritto:Ma gli array(che da quel che ho capito sono unidimensionali) sono vettori,giusto?
Sì, array o vettore o lista sono la stessa cosa concettualmente: oggetti che collegano un numero [l'indice] ad un elemento.
mklplo ha scritto:Se così fosse significa che in c++ si possono definire anche delle matrici?
Anche in C si possono definire array multidimensionali, cioè oggetti con più indici, che per esempio possono modellizzare matrici.
mklplo ha scritto:Scusate per le domande,ma stando veramente agli inizi,molte cose non le capisco ancora.
No problem!