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

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
drewnik99 (Normal User)
Pro


Messaggi: 69
Iscritto: 28/03/2008

Segnala al moderatore
Postato alle 15:29
Mercoledì, 27/07/2011
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++

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



Io utilizzo Visual Studio 2010 come IDE.
Grazie in anticipo per qualsialsi aiuto.

PM Quote
Avatar
arack95 (Member)
Pro


Messaggi: 144
Iscritto: 15/11/2010

Segnala al moderatore
Postato alle 15:54
Mercoledì, 27/07/2011
Non puoi fare in quel modo, devi allocare dinamicamente la memoria, in particolare in C si usano(di solito) malloc e free.
Un esempio lo trovi qua:
http://www.cplusplus.com/reference/clibrary/cstdlib/malloc/

PM Quote
Avatar
comina8 (Normal User)
Pro


Messaggi: 86
Iscritto: 18/06/2011

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

Postato originariamente da arack95:

Non puoi fare in quel modo, devi allocare dinamicamente la memoria, in particolare in C si usano(di solito) malloc e free.
Un esempio lo trovi qua:
http://www.cplusplus.com/reference/clibrary/cstdlib/malloc/



Codice sorgente - presumibilmente C/C++

  1. int i;
  2. int *Array;
  3. scanf("%d",&i);
  4. Array=(int*)malloc(i*sizeof(int));
  5. //codice
  6. free(Array); //ricordati sempre di farlo


PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 17:53
Mercoledì, 27/07/2011
E usa calloc invece di malloc. In questa maniera la memoria viene inizializzata a zero. Con malloc devi inizializzarla separatamente.


Il mio blog: https://piero.dev
PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 20:42
Mercoledì, 27/07/2011
@Piero facciamo un esempio, in modo tale che ha le idee chiare:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.         int *arrayDinamico;
  7.         int elementi;
  8.         int i = 0;
  9.        
  10.         printf( "Numero max di elementi " );
  11.         scanf( "%d", &elementi );
  12.        
  13.         arrayDinamico = calloc( elementi, sizeof( int ) );
  14.         if ( arrayDinamico == NULL )
  15.         {
  16.                 printf( "Errore allocazione\n" );
  17.                 exit( 1 );
  18.         }
  19.        
  20.         for ( ; i < elementi; i++ )
  21.         {
  22.                 /* da notare tutti gli elementi inizializzati */
  23.                 printf( "arrayDinamico[%d] = %d\n", i, arrayDinamico[i] );
  24.         }
  25.        
  26.         free( arrayDinamico );
  27.         return 0;
  28. }


PM Quote
Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Segnala al moderatore
Postato alle 20:46
Mercoledì, 27/07/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...

PM Quote
Avatar
arack95 (Member)
Pro


Messaggi: 144
Iscritto: 15/11/2010

Segnala al moderatore
Postato alle 21:05
Mercoledì, 27/07/2011
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.

PM Quote
Avatar
comina8 (Normal User)
Pro


Messaggi: 86
Iscritto: 18/06/2011

Segnala al moderatore
Postato alle 21:17
Mercoledì, 27/07/2011
Ci sarebbe però anche questo metodo:

Codice sorgente - presumibilmente C/C++

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


PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 21:22
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];




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: https://piero.dev
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo