2012-04-19 11 views
7

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?

+0

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. –

Respuesta

11

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 }; 
8

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.

+0

Me gustas idea. También usaré '#define EON EOF'. – Jack

0

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.

+3

¿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. –

+0

Exactamente. Si ningún otro valor en la matriz contiene 0, entonces puede usar 0 como terminador. –

+2

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. –

0

C no sabe dónde está el final de su matriz dinámica. debe recordar el tamaño que asigna para la matriz.

0

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.

Cuestiones relacionadas