Oppure

Loading
27/07/11 13:29
drewnik99
Ho iniziato il C e sul manuale ho letto che si possono creare array a lunghezza variabile.
Quindi è possibile questo?

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


Io utilizzo Visual Studio 2010 come IDE.
Grazie in anticipo per qualsialsi aiuto.
aaa
27/07/11 13:54
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:
cplusplus.com/reference/clibrary/cstdlib/malloc/
aaa
27/07/11 15:23
comina8
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:
cplusplus.com/reference/clibrary/cstdlib/malloc/


int i;
int *Array;
scanf("%d",&i);
Array=(int*)malloc(i*sizeof(int));
//codice
free(Array); //ricordati sempre di farlo
aaa
27/07/11 15:53
pierotofy
E usa calloc invece di malloc. In questa maniera la memoria viene inizializzata a zero. Con malloc devi inizializzarla separatamente.
Il mio blog: piero.dev
27/07/11 18:42
Pitagora
@Piero facciamo un esempio, in modo tale che ha le idee chiare:

#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;
}
aaa
27/07/11 18:46
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...
aaa
27/07/11 19:05
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.
aaa
27/07/11 19:17
comina8
Ci sarebbe però anche questo metodo:

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