Oppure

Loading
27/07/11 19:22
pierotofy
Postato originariamente da comina8:

Ci sarebbe però anche questo metodo:

    const int i;
    scanf("%d",&i);
    int array[i];


Assolutamente no. :_doubt:

Il fatto che questo codice sia accettato del compilatore non vuol dire che funzioni. Vedi se riesci a capire perchè.
Il mio blog: piero.dev
27/07/11 19:24
Pitagora
Postato originariamente da comina8:

Ci sarebbe però anche questo metodo:

    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.
const int i = 4; // ok
const int i; // male
i = 4; // male
Ultima modifica effettuata da Pitagora 27/07/11 19:29
aaa
27/07/11 19:26
pierotofy
Postato originariamente da Pitagora:

Postato originariamente da comina8:

Ci sarebbe però anche questo metodo:

    const int i;
    scanf("%d",&i);
    int array[i];

Si esatto


Pitagora, rivediti anche tu il capitolo sull'allocazione dinamica del C.
Il mio blog: piero.dev
27/07/11 19:33
anthony015
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?
aaa
27/07/11 19:34
Pitagora
@Piero devi quotare anche il resto.... 8-|
aaa
27/07/11 21:16
comina8
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...

...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??
aaa
27/07/11 23:04
pierotofy
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:

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. en.wikipedia.org/wiki/…

In linea definitiva, per andare sul sicuro, l'uso di calloc e malloc è sempre quello più consigliato.

Ultima modifica effettuata da pierotofy 28/07/11 5:51
Il mio blog: piero.dev
28/07/11 8:59
drewnik99
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 28/07/11 9:09
aaa