2012-04-19 16 views
7

Sto creando un array dinamico con il tipo di dati int* utilizzando malloc(). Ma i problemi sono: come sapere la fine dell'array? non esiste un equivalente a \0 per il tipo di dati int*, quindi, come fare? passare la dimensione come parametro esterno della funzione? Spero che questo sia chiaro per te. Qualsiasi aiuto è bene accetto.Come sapere la fine di int * array?

+0

Si sta usando malloc() glob un po 'di memoria come malloc (sizeof (int) * ELEMENTS) Suppongo. Quindi in realtà sai che gli ELEMENTI sono di dimensioni, puoi salvare la variabile e passarla alle tue funzioni. –

risposta

11

C non gestisce le lunghezze degli array, come alcuni altri linguaggi.

si potrebbe considerare una struttura per questo:

typedef struct t_thing { 
    int* things; 
    size_t count; 
} t_thing; 

in uso:

t_thing t = { (int*)malloc(sizeof(int) * n), n }; 
8

Non esiste un equivalente "ufficiale" a \0 per i numeri interi, ma è possibile utilizzare il proprio valore. Ad esempio, se i tuoi numeri interi rappresentano le distanze, puoi usare -1 (non una distanza valida) come valore sentinella per indicare la fine dell'array.

Se l'array intero può ragionevolmente contenere qualsiasi valoreint, allora si può passare di nuovo la dimensione dell'array allocato con un parametro aggiuntivo alla funzione.

+0

Mi piace l'idea. Userò anche '#define EON EOF'. – Jack

0

È possibile utilizzare NULL come valore finale. È possibile aggiungere un numero intero a una struttura con l'array che tiene traccia del numero di voci. Oppure puoi tenere traccia delle dimensioni separatamente. Puoi farlo come vuoi.

+3

Come utilizzeresti NULL come valore finale per un int []? I byte 00 00 00 00 sarebbero semplicemente interpretati come (int) 0. –

+0

Esattamente. Se nessun altro valore dell'array contiene 0, puoi usare 0 come terminatore. –

+2

E se nessun altro valore contiene 42, puoi usare 42. La risposta implica per me almeno che 'int' è in qualche modo un tipo nullable, che ovviamente non lo è. –

0

C non sa dove è la fine della vostra matrice dinamica. si dovrebbe ricordare la dimensione che si assegna per l'array.

0

quando si alloca memoria con malloc, il numero di byte allocati viene memorizzato appena prima dell'inizio della memoria malloc'ated. se conosci la dimensione, conosci anche la fine! Questo è spiegato nella Bibbia di C, il libro K & R. Vorrei poterti dare il numero di pagina, ma lo saprai quando lo vedrai.

Problemi correlati