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

Responder a