Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
Postato originariamente da comina8:
Ci sarebbe però anche questo metodo:
Codice sorgente - presumibilmente C/C++ |
const int i;
scanf("%d",&i);
int array[i];
|
|
Si esatto, però in C, BUONA NORMA AFFERMA che, tutte le dichiarazioni vanno poste all'inizio della funzione.
P.S. una variabile di tipo const deve essere dichiarata nella stessa riga della dichiarazione.
Codice sorgente - presumibilmente C++ |
const int i = 4; // ok const int i; // male i = 4; // male
|
Ultima modifica effettuata da Pitagora il 27/07/2011 alle 21:29 |
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
Postato originariamente da Pitagora:
Postato originariamente da comina8:
Ci sarebbe però anche questo metodo:
Codice sorgente - presumibilmente C/C++ |
const int i;
scanf("%d",&i);
int array[i];
|
|
Si esatto |
Pitagora, rivediti anche tu il capitolo sull'allocazione dinamica del C.
|
|
anthony015 (Member)
Pro
Messaggi: 116
Iscritto: 20/05/2011
|
Postato originariamente da arack95:
Postato originariamente da anthony015:
puoi benissimo dichiarare un array come hai fatto tu, ma non è di dimensione variabile, ma della dimensione di i al momento della dichiarazione, se in futuro cambi i, l'array resta sempre grande uguale... |
Ma cazzarola dici? Se fà come ha fatto lui il compilatore dà errore chiedendo un int const. |
a me il compilatore lo accetta e la dimensione dell'array è quella della variabile...
potresti spiegarmi perché non dovrebbe andare? |
|
Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
@Piero devi quotare anche il resto....
|
|
comina8 (Normal User)
Pro
Messaggi: 86
Iscritto: 18/06/2011
|
Postato originariamente da Pitagora:
@Piero devi quotare anche il resto.... |
Quoto.
In ogni caso se il compilatore lo accetta e il programma funziona correttamente vuol dire che si può usare...
...Pitagora
Si esatto, però in C, BUONA NORMA AFFERMA che, tutte le dichiarazioni vanno poste all'inizio della funzione.
|
Buona norma non vuol dire norma obbligatoria, se ho bisogno di una variabile nel ramo di una if la devo tenere allocata per tutta la funzione/programma?? |
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
Ok ho fatto un po' di ricerca e credo che ci sia qualcosa da chiarire.
Gli array a lunghezza variabile sono una features "nuova" del C, introdotta solamente dallo standard C99.
Questa feature permette di usare codice del tipo:
Codice sorgente - presumibilmente C/C++ |
int i;
scanf("%d",&i);
int array[i];
|
Lo spazio non si sa dove viene allocato, a volte sullo stack, a volte sull'heap, ma dipende dall'implementazione. GNU C Compiler utilizza lo stack (quello usato da dev-c++). Visual Studio non supporta lo standard C99, quindi non è nemmeno possibile usarlo. http://en.wikipedia.org/wiki/C99#Implementations
In linea definitiva, per andare sul sicuro, l'uso di calloc e malloc è sempre quello più consigliato.
Ultima modifica effettuata da pierotofy il 28/07/2011 alle 7:51
|
|
drewnik99 (Normal User)
Pro
Messaggi: 69
Iscritto: 28/03/2008
|
Vi ringrazio per le numerose risposte. Adesso ho risolto questo problema, ma potete consigliarmi qualche buon compilatore che supporti C99?
Ultima modifica effettuata da drewnik99 il 28/07/2011 alle 11:09 |
|
Alex (Ex-Member)
Expert
Messaggi: 441
Iscritto: 15/08/2005
|
Postato originariamente da arack95:
Postato originariamente da anthony015:
puoi benissimo dichiarare un array come hai fatto tu, ma non è di dimensione variabile, ma della dimensione di i al momento della dichiarazione, se in futuro cambi i, l'array resta sempre grande uguale... |
Ma cazzarola dici? Se fà come ha fatto lui il compilatore dà errore chiedendo un int const. |
non da errore se il compilatore è aderente allo standard c99 che permette che l'inizializzatore dell'array sia non costante...
EDIT: scusate non avevo visto la risposta in seconda pagina=) Ultima modifica effettuata da Alex il 28/07/2011 alle 12:16 |
|