Estoy haciendo una matriz dinámica con int*
tipo de datos usando malloc()
. Pero el problema es: ¿cómo saber el final de la matriz? no hay un equivalente a \0
para el tipo de datos int*
, entonces, ¿cómo hacer esto? pasar el tamaño como parámetro de la función? Espero que esto esté claro para ti. Se agradece mucho cualquier ayuda.¿Cómo saber el final de int * array?
Respuesta
C no gestiona las longitudes de matriz, como lo hacen algunos otros lenguajes.
se podría considerar una estructura para esto:
typedef struct t_thing {
int* things;
size_t count;
} t_thing;
en uso:
t_thing t = { (int*)malloc(sizeof(int) * n), n };
No existe un equivalente "oficial" para \0
para enteros, pero ciertamente puede usar su propio valor. Por ejemplo, si sus enteros representan distancias, puede usar -1 (no una distancia válida) como valor centinela para indicar el final de la matriz.
Si su matriz entera puede contener razonablemente cualquier valorint
, a continuación, puede pasar de nuevo el tamaño de la matriz asignado con un parámetro adicional a su función.
Me gustas idea. También usaré '#define EON EOF'. – Jack
Puede usar NULL
como valor final. Puede agregar un entero a una estructura con la matriz que rastrea el número de entradas. O puede rastrear el tamaño por separado. Puedes hacerlo como quieras.
¿Cómo podría usar NULL como valor final para un int []? Los bytes 00 00 00 00 simplemente se interpretarían como (int) 0. –
Exactamente. Si ningún otro valor en la matriz contiene 0, entonces puede usar 0 como terminador. –
Y si ningún otro valor contiene 42, puede usar 42. La respuesta implica para mí, al menos, que 'int' es de alguna manera un tipo anulable, que por supuesto no lo es. –
C no sabe dónde está el final de su matriz dinámica. debe recordar el tamaño que asigna para la matriz.
Cuando asigna memoria con malloc, el número de bytes asignados se almacena justo antes del inicio de la memoria 'malloc'ated. si conoces el tamaño, ¡también sabes el final! Esto se explica en la Biblia de C, el libro K & R. Desearía poder darte el número de página también, pero lo sabrás cuando lo veas.
- 1. java convert object array a int array
- 2. Java int ... notación de array
- 3. Quitar dtype al final de numpy array
- 4. Problemas para convertir el conjunto de enteros a int [] array
- 5. ruby rails convertir params a int array
- 6. ¿Cómo funciona "int final" dentro de un bucle for Java?
- 7. Ruta más corta de Java Maze 2d int array
- 8. cómo saber el índice de UITableView.visibleCells?
- 9. Java - ¿Convertir int a Byte Array de 4 bytes?
- 10. C - unsigned int a unsigned char array conversion
- 11. tipo de int * (*) (* int, int * (*)())
- 12. ¿Cómo puedo saber si el NSNumber que obtengo de -valueForKey fue inicialmente int o float?
- 13. ¿Cómo puedo saber si el valor de mi objeto es un flotante o int?
- 14. ¿Cómo puedo saber cuándo llegué al final del archivo cuando uso el método ReadBlock en C#?
- 15. C++ declara una matriz de matrices sin saber el tamaño
- 16. ¿Cómo maneja ruby el rango de array?
- 17. ¿Necesita saber cómo funciona el tenedor?
- 18. sobre el operador array subscripting
- 19. Array Bounds Check Elimination en el CLR?
- 20. ¿Cómo saber si un enumerador ha llegado al final de la colección en C#?
- 21. Diferencia entre array [n] y array []?
- 22. ¿Cómo detectar el final de la secuencia?
- 23. sizeof array clarification
- 24. Cómo convertir int * a int
- 25. JSONArray a string array
- 26. ¿Cómo convierto int? en int
- 27. Una confusión acerca de $ {array [*]} versus $ {array [@]} en el contexto de una finalización de Bash
- 28. Borrar el miembro final de std :: set
- 29. Cómo escribir (String): ¿Función Int?
- 30. Tratar C cstyle array como std :: array
Estás utilizando malloc() glob algunos memoria como malloc (sizeof (int) * ELEMENTS) Supongo. Entonces, en realidad sabes que ELEMENTS en tamaño, puedes guardar la variable y pasarla a tus funciones. –