PDA

View Full Version : [C]dimensione Array dinamica


-Yara-
25-02-2005, 19:54
Ciao a tutti..

Come si fa a fare un array del quale non so a priori la dimensione?
Ho cercato un po' e ho trovato che bisogna usare la funzione malloc().
Ma non ho capito molto bene come funziona...e non ho capito se dichiarare un array cosi:

int array[5];

e

int *array;

è la stessa cosa?

Inoltre non riesco a capire il seguente programma:

#include<stdio.h>
#include<stdlib.h>

int main()
{
int allocaz,alloc_lenght,*array,i,temp;

printf("Quanto deve essere grande l'array?");
scanf("%d",&alloc_lenght);
array=(int *)malloc(sizeof(int)*alloc_lenght);
allocaz=sizeof(int)*alloc_lenght;
//carico l'array
for(i=0;i<alloc_lenght;i++)
array[i]=rand()%10;
temp=i;
//visualizzo l'array
for(i=0;i<alloc_lenght;i++)
printf("%d",array[i]);
printf("Grandezza array: ");
printf("%d",temp);
//libero la memoria
free(array);
getchar();
}

Chi mi aiuta? :)
Grazie

VegetaSSJ5
25-02-2005, 20:27
se dichiari un array in questo modo:

int array[5];

dai all'array una dimensione statica, che è 5, e non può essere cambiata in momenti successivi.

per dichiarare un array con dimensione variabile devi dichiarare un puntatore ad intero (o a qualsiasi altro tipo) e poi fare la malloc:

int *array;
array= (int *) malloc (DIM*sizeof(int));

in questo modo array punta ad un'area di memoria che può contenere DIM elemento di tipo int (sizeof(int)). il valore restituito dalla malloc è un puntatore a void (void*) per cui viene castato a puntatore ad intero.


penso che con questa piccola spiegazione dovresti anche capire cosa fa il programma che hai postato.

-Yara-
25-02-2005, 20:41
Originariamente inviato da VegetaSSJ5
se dichiari un array in questo modo:

int array[5];

dai all'array una dimensione statica, che è 5, e non può essere cambiata in momenti successivi.

per dichiarare un array con dimensione variabile devi dichiarare un puntatore ad intero (o a qualsiasi altro tipo) e poi fare la malloc:

int *array;
array= (int *) malloc (DIM*sizeof(int));

in questo modo array punta ad un'area di memoria che può contenere DIM elemento di tipo int (sizeof(int)). il valore restituito dalla malloc è un puntatore a void (void*) per cui viene castato a puntatore ad intero.


penso che con questa piccola spiegazione dovresti anche capire cosa fa il programma che hai postato.

Intanto ti ringrazio per la risposta, comunque non riesco a capire a cosa serva

allocaz=sizeof(int)*alloc_lenght;


EDIT: ho provato a far partire il programma senza quell'istruzione e va lo stesso :D

VegetaSSJ5
25-02-2005, 21:00
Originariamente inviato da -Yara-
Intanto ti ringrazio per la risposta, comunque non riesco a capire a cosa serva

allocaz=sizeof(int)*alloc_lenght;


EDIT: ho provato a far partire il programma senza quell'istruzione e va lo stesso :D
certo che va lo stesso il programma. in pratica la sizeof(xxxx) restituisce lo spazio occupato (in byte) da una variabile o un tipo. in questo caso sizeof(int) restituisce lo spazio ocupato da una variabile di tipo int. quindi sizeof(int)*alloc_length restituisce lo spazio occupato da tutto l'array.

-Yara-
25-02-2005, 21:10
Originariamente inviato da VegetaSSJ5
certo che va lo stesso il programma. in pratica la sizeof(xxxx) restituisce lo spazio occupato (in byte) da una variabile o un tipo. in questo caso sizeof(int) restituisce lo spazio ocupato da una variabile di tipo int. quindi sizeof(int)*alloc_length restituisce lo spazio occupato da tutto l'array.

Ok chiarissimo :D
Grazie ancora

beppegrillo
25-02-2005, 22:10
Originariamente inviato da VegetaSSJ5
se dichiari un array in questo modo:

int array[5];


Non è possibile aumentare la dimensione con un realloc?

VegetaSSJ5
25-02-2005, 22:27
Originariamente inviato da beppegrillo
Non è possibile aumentare la dimensione con un realloc?
le variabili dichiarate come array (e non come puntatori) non possono essere riallocate.