Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Array a lunghezza variabile
Forum - C/C++ - Array a lunghezza variabile - Pagina 2

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 21:24
Mercoledì, 27/07/2011
Testo quotato

Postato originariamente da comina8:

Ci sarebbe però anche questo metodo:

Codice sorgente - presumibilmente C/C++

  1. const int i;
  2.     scanf("%d",&i);
  3.     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++

  1. const int i = 4; // ok
  2. const int i; // male
  3. i = 4; // male


Ultima modifica effettuata da Pitagora il 27/07/2011 alle 21:29
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 21:26
Mercoledì, 27/07/2011
Testo quotato

Postato originariamente da Pitagora:

Testo quotato

Postato originariamente da comina8:

Ci sarebbe però anche questo metodo:

Codice sorgente - presumibilmente C/C++

  1. const int i;
  2.     scanf("%d",&i);
  3.     int array[i];



Si esatto



Pitagora, rivediti anche tu il capitolo sull'allocazione dinamica del C.


Il mio blog: https://piero.dev
PM Quote
Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Segnala al moderatore
Postato alle 21:33
Mercoledì, 27/07/2011
Testo quotato

Postato originariamente da arack95:

Testo quotato

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?

PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 21:34
Mercoledì, 27/07/2011
@Piero devi quotare anche il resto.... 8-|

PM Quote
Avatar
comina8 (Normal User)
Pro


Messaggi: 86
Iscritto: 18/06/2011

Segnala al moderatore
Postato alle 23:16
Mercoledì, 27/07/2011
Testo quotato

Postato originariamente da Pitagora:

@Piero devi quotare anche il resto.... 8-|



Quoto.
In ogni caso se il compilatore lo accetta e il programma funziona correttamente vuol dire che si può usare...

Testo quotato

...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??

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 1:04
Giovedì, 28/07/2011
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++

  1. int i;
  2. scanf("%d",&i);
  3. 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


Il mio blog: https://piero.dev
PM Quote
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 10:59
Giovedì, 28/07/2011
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
PM Quote
Avatar
Alex (Ex-Member)
Expert


Messaggi: 441
Iscritto: 15/08/2005

Segnala al moderatore
Postato alle 12:15
Giovedì, 28/07/2011
Testo quotato

Postato originariamente da arack95:

Testo quotato

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
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo