DOMANDA [C] Dubbio dimensione array

Zero93

Nuovo Utente
Salve a tutti, ho un dubbio per quanto riguarda l'allocazione della dimensione di un array. In C è CORRETTO definire la dimensione di un array con una variabile il cui valore non è noto a priori?
Cioè corretto che il valore della variabile possa essere decisa a posteriori? come in questo esempio?

int dimensione;
printf("Inserisci dimensione array: ");
scanf("%d", &dimensione);
int array[dimensione];

Oppure in C la dimensione di un array deve essere nota in fase di compilazione?

int dimensione = 50;
int array[dimensione];



Non sto chiedendo se funzioni (perché di funzionare funziona), ma se sia corretto.
Devo fare un programma di gestione email in C per un esame, e questo linguaggio non lo tocco da 2 anni, e mi è sorto questo dubbio.
 

Dario Salvati

Utente Attivo
1,397
246
Hardware Utente
CPU
Intel Core i5-3470
Scheda Madre
ASUS P8Z77-V LX
Hard Disk
Western Digital Green 1TB 7200rmp + Crucial M550 128Gb
RAM
Corsair 8Gb(2x4GB) 1600Mhz
Scheda Video
Msi GeForce 770 2Gb
Scheda Audio
Integrata mainbord
Monitor
Asus VE247H / 23.6"
Alimentatore
XFX 550W Core Edition
Case
Fractal Design R4
Sistema Operativo
Arch Linux + Gnome
Io ho spesso fatto così e non mi hanno mai detto nulla, non penso ci sia nulla di sbagliato (o meglio, incorretto).
 
  • Mi piace
Reactions: Zero93

BAT00cent

Utente Attivo
1,006
440
Hardware Utente
che compila non mi sorprende ma quando (tanto tempo fa) studiai il C questo metodo non funzionava, nel senso che, all'epoca, usavamo 2 modi per allocare i vettori:
A. vettori statici: la dimensione deve essere nota e fissata a tempo di compilazione

B. vettori dinamici: è il tuo caso, ossia leggi da input quale sarà la dimensione dell'array, ignota quindi alla compilazione;
in questo caso l'allocazione la facevo diversamente:
- definire un puntatore a interi
- definire una dimensione da leggere in input
- allocare manualmente la memoria necessaria

Il codice suona più o meno così (esempio di vettore di interi)

int *a; /* puntatore all'inizio dell'array */
int d; /* dimensione */
printf("Inserire numero elementi ");
scanf("%d", &d); /* leggi dimensione */
a=malloc(d*sizeof(int)); /* alloca la memoria */


Onestamente non sono aggiornato sulle evoluzioni del C, per cui non so se si fa ancora in questo modo; l'allocazione dinamica al volo è invece permessa in Java nativamente con un codice simile a quello che avete mostrato nei post precedenti
 
  • Mi piace
Reactions: Zero93

Zero93

Nuovo Utente
BAT00cent il metodo b ricordo di averlo usato a inizio università, sì è un vettore a puntatori.
Penso di mandare una mail all'assistente e vedo che dice. Grazie a tutti e due.
 

Entra

oppure Accedi utilizzando