drewnik99 (Normal User)
Pro
Messaggi: 69
Iscritto: 28/03/2008
|
Ho iniziato il C e sul manuale ho letto che si possono creare array a lunghezza variabile.
Quindi è possibile questo?
Codice sorgente - presumibilmente C/C++ |
int i;
scanf("%2d", &i);
int array[i];
|
Io utilizzo Visual Studio 2010 come IDE.
Grazie in anticipo per qualsialsi aiuto.
|
|
arack95 (Member)
Pro
Messaggi: 144
Iscritto: 15/11/2010
|
|
|
comina8 (Normal User)
Pro
Messaggi: 86
Iscritto: 18/06/2011
|
Codice sorgente - presumibilmente C/C++ |
int i;
int *Array;
scanf("%d",&i);
Array=(int*)malloc(i*sizeof(int));
//codice
free(Array); //ricordati sempre di farlo
|
|
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
E usa calloc invece di malloc. In questa maniera la memoria viene inizializzata a zero. Con malloc devi inizializzarla separatamente.
|
|
Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
@Piero facciamo un esempio, in modo tale che ha le idee chiare:
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #include <stdlib.h> int main() { int *arrayDinamico; int elementi; int i = 0; printf( "Numero max di elementi " ); scanf( "%d", &elementi ); arrayDinamico = calloc( elementi, sizeof( int ) ); if ( arrayDinamico == NULL ) { printf( "Errore allocazione\n" ); exit( 1 ); } for ( ; i < elementi; i++ ) { /* da notare tutti gli elementi inizializzati */ printf( "arrayDinamico[%d] = %d\n", i, arrayDinamico[i] ); } free( arrayDinamico ); return 0; }
|
|
|
anthony015 (Member)
Pro
Messaggi: 116
Iscritto: 20/05/2011
|
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...
|
|
arack95 (Member)
Pro
Messaggi: 144
Iscritto: 15/11/2010
|
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. |
|
comina8 (Normal User)
Pro
Messaggi: 86
Iscritto: 18/06/2011
|
Ci sarebbe però anche questo metodo:
Codice sorgente - presumibilmente C/C++ |
const int i;
scanf("%d",&i);
int array[i];
|
|
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
Postato originariamente da comina8:
Ci sarebbe però anche questo metodo:
Codice sorgente - presumibilmente C/C++ |
const int i;
scanf("%d",&i);
int array[i];
|
|
Assolutamente no.
Il fatto che questo codice sia accettato del compilatore non vuol dire che funzioni. Vedi se riesci a capire perchè.
|
|