PDA

Visualizza la versione completa : [C] Definizione Array


mattia123
22-08-2010, 12:19
Salve a tutti,
mi trovo davanti ad un problema che mi sembra molto molto banale ma che non riesco a risolvere. Devo gestire un array di cui al momento della scrittura del codice non coosco le dimensioni, ma che una volta creato non cambia mai grandezza. Con java mi basterebbe contare gli elementi e fare "int array[p];" dove p è appunto la variabile contatore. Ma C non mi permette di fare questo, mi chiede infatti come argomento dell'array necessariamente un numero e non una variabile. Come posso risolvere?
Grazie

shodan
22-08-2010, 12:32
Devi usare malloc.
Ad esempio:



int* arr = (int*) malloc(sizeof(int) * numero_di_elementi_letti_da_variabile);

/* quando non serve più */
free(arr);

La parte in rosso è obbligatoria se non usi un compilatore C puro.

napoleone89
22-08-2010, 12:35
credo che questo programma faccia quello che chiedi...

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

int main(int argc, char** argv) {


int cont;
int array[cont];


for(cont=0; cont<=4; cont++)
{
array[cont]=cont;
printf("%d", array[cont]);
}


return (0);
}

e come argomento dell'array c'è una variabile...dovrebbe andare bene dato che compila....

Alex'87
22-08-2010, 12:39
Originariamente inviato da napoleone89
credo che questo programma faccia quello che chiedi...
Mi pare che mattia123 abbia chiesto tutt'altro..

Ippo343
22-08-2010, 12:43
E soprattutto, nel programma di napoleone cont non è inizializzata, quindi se tanto mi da tanto dovrebbe crashare in modo spettacolare circa la metà delle volte.

E comunque l'allocazione dinamica non si può sostituire così: bisogna per forza usare malloc.

mattia123
22-08-2010, 17:06
Originariamente inviato da shodan
Devi usare malloc.
Ad esempio:



int* arr = (int*) malloc(sizeof(int) * numero_di_elementi_letti_da_variabile);

/* quando non serve più */
free(arr);

La parte in rosso è obbligatoria se non usi un compilatore C puro.
Grazie. Ultima cosa, dopo per accedervi devo andare di arr++ giusto? non arr[i]

Ippo343
22-08-2010, 17:14
Assolutamente no. Facendo arr++, modifichi di fatto il valore di arr, e quindi il puntatore non punta più all'inizio dell'array.

Per accedere agli elementi, usi arr[i], esattamente come se fosse un vettore (i vettori sono, in effetti, dei puntatori). Una sintassi equivalente è *(arr + i).

Cell
22-08-2010, 21:44
Originariamente inviato da napoleone89
dovrebbe andare bene dato che compila....
Questa è una di quelle frasi che mi fanno rabbrividire ogni volta che le sento. :spy:

Loading