Logo ITP-NEWS
RSS | Contatti | Login|Registrati| Home
Giornale
Generazione di un array dinamico di numeri casuali
Puntino blu
A cura di Di Fusco Francesco
2009-03-10
Tramite la funzione malloc generiamo dinamicamente un array di numeri casuali. Dinamicamente significa che la dimensione dell'array non è nota a priori, ma viene definita durante l'esecuzione del programma:

printf("Inserisci n:");
scanf("%d",&n);

Viene poi allocato lo spazio sufficiente a contenere i numeri casuali, ovvero il numero n letto precedentemente

v=malloc(n*sizeof(float));

Se lo spazio è stato allocato correttamente, vengono generati gli n numeri casuali e memorizzati nel vettore v, nella posizione corrispondente:

for (i=0;i < n;i++)
{
dato=(float)(1+rand()%100);
*(v+i)=dato;
}

L'istruzione

*(v+i)=dato;

pone nella locazione v+i il numero casuale generato, cioè dato

Si facci attenzione all'aritmetica dei puntatori. L'espressione

(v+i)

indica che all'indirizzo base di v viene sommato non il valore di i, altrimenti avremmo una serie di indirizzi come:

v+ 0 , v+ 1 , v+ 2 , v+ 3 , ...

ma come correttamente dovrebbe essere, all'indirizzo di base v viene sommato la quantità

i*sizeof(float)

in modo tale da avere

v+ 0 , v+ 1*4 , v+ 2*4 , v+ 3*4 , ...

ovvero

v+ 0 , v+ 4 , v+ 8 , v+ 12 , ...

supponendo che sizeof(float) sia 4, ovvero che un float venga memorizzato utilizzando 4 byte.


// Creazione di un array dinamico
// Autore: Di Fusco Francesco
// Data: 09/03/2009
#include "stdio.h"
#include "stdlib.h"
int main()
{
int n,i;
i=0;
float dato;
float *v; // Puntatore ad un array di float
printf("Inserisci n:");
scanf("%d",&n);
v=malloc(n*sizeof(float));
if (v!=NULL)
printf("Spazio correttamente allocato per un array dinamico di %d elementi di tipo float\n",n);
else
printf("Errore: memoria insufficiente per allocare un array dinamico di %d elementi \n",n);
if (v!=NULL)
{
for (i=0;i < n;i++)
{
dato=(float)(1+rand()%100);
*(v+i)=dato;
}
for (i=0;i < n;i++)
{
printf("\nV[%d]=%f",i,*(v+i));
}
}
return 0;
}
Documenti allegati:
din_vett2.c