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?
risposta
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 };
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.
Mi piace l'idea. Userò anche '#define EON EOF'. – Jack
È 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.
Come utilizzeresti NULL come valore finale per un int []? I byte 00 00 00 00 sarebbero semplicemente interpretati come (int) 0. –
Esattamente. Se nessun altro valore dell'array contiene 0, puoi usare 0 come terminatore. –
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 è. –
C non sa dove è la fine della vostra matrice dinamica. si dovrebbe ricordare la dimensione che si assegna per l'array.
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.
- 1. Come sapere la fine del messaggio di benvenuto FTP
- 2. Confronta array float come int array
- 3. Come rendere int array Nullable?
- 4. Come convertire un array di byte in un array int?
- 5. Unboxing uint/int senza sapere cosa c'è dentro la scatola
- 6. Come aggiungere un elemento alla fine di un array?
- 7. Int a byte array
- 8. int array to BufferedImage
- 9. Numero enorme di array int durante la deserializzazione di java
- 10. C - elemento oltre la fine di un array
- 11. Java int ... notazione array
- 12. Change chiave array senza fine
- 13. Efficienza: char array vs int array
- 14. In che modo std :: end conosce la fine di un array?
- 15. Bithifting efficiente di un array di int?
- 16. Come memorizzare int [] array nell'applicazione Impostazioni
- 17. Perché passare array come "int * & name"?
- 18. Come determinare la fine di un array intero quando si manipola con un puntatore intero?
- 19. Come convertire l'array int in int?
- 20. Converte array di stringhe nell'array int
- 21. Come raggiungere la fine di un'espressione AST
- 22. ArrayList di array int in java
- 23. foreach in C++ int array
- 24. Differenza tra int * array e int array [] in un parametro di funzione
- 25. Perché non ottengo un errore di segmentazione quando scrivo oltre la fine di un array?
- 26. Come sapere se un enumeratore ha raggiunto la fine della raccolta in C#?
- 27. Java char array to int
- 28. Variabile di classe Python int vs array
- 29. Ottenere un puntatore alla fine di un array
- 30. C++: Ordinare la parte iniziale di un array crescente e dall'altra al fine
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. –