El Vie 13 Abr 2001 13:31, escribiste:
> Hola, cueria preguntarle si y como puedo hacer para que una funcion
> crea_arreglo pueda render un arreglo.
> O sea, cuiero que el indice de un arreglo se decidido de un usuario y
> despues este arreglo se usable en la funcion main.
> Se que tengo que hacer algo con el operator cast pero no se como!
> Gracias Ombra.
Si entiendo bien, la idea es que el usuario decida el tamaño del arreglo...
Lo que se hace es no usar arreglos! ;-)
En cambio se define un puntero al tipo de datos con el que se trabaja, se
pide memoria en forma dinámica con la función malloc y se asigna la dirección
de la memoria obtenida a nuestra variable puntero. Como malloc devuelve un
puntero a "void" (en este caso más que un sentido de nulo, se refiere a un
tipo "indeterminado"), hay que hacer un cast al tipo del puntero, es decir se
antecede al malloc con un juego de paréntesis y el tipo: (int *) (char *)
(struct mi_estructura *), etc.
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *mi_arreglo;
char s[10];
printf("Tamaño del arreglo:");
fgets(s,10,stdin);
mi_arreglo=(char *)malloc(atoi(s)*sizeof(char));
/* Se puede usar el puntero con "aritmética de punteros:"
*(mi_arreglo+5)='a'; /* El sexto char es a */
/* O usar sintaxis de arreglo, aun cuando no mi_arreglo sea un puntero */
mi_arreglo[5] = 'b'; /* Ahora el sexto char es b */
[...]
free(mi_arreglo); /* No queremos un "memory leak" :-) */
return 0;
}
Si bien este ejemplito usa char, se puede usar cualquier tipo o estructura,
por supuesto el cast (char *) se debe reemplazar por el del tipo que
corresponda, así como el sizeof.
Ah! Un poco de cultura! :-)
Los sonidos "k" en castellano son "ca, que, qui, co, cu" (salvo las palabras
que se escriben con ke/ki, como kilo, pero que es válido usar "qu" en lugar
de "k". Quiero decir, justamente, no es "cuiero"...
--
Saludos
Julio César Gázquez