arrays dinamicos bidimensionales en c??!
Bueno estube buscando como utilizar los arrays dinamicos en c y no pude entender a la logica de algunos ejemplos..el uso de malloc en arrays sencillos es facil pero no puedo hacerlo con bidimensionales alguien me ayuda!??? por favor..y de antemano gracias
Hola:
Es un poco liado hasta que se entiende, pero luego es sencillo.
Un array dinamico de dos dimensiones se puede pensar como un puntero a un array de punteros. Puedes declararlos asi
double **array;
Primero necesitas reservar sitio para el array de punteros. Imagina que quieres hacer una matriz de 10 filas y 20 columnas. Se puede hacer asi
array = (double **)malloc (10* sizeof(double *));
Ya tienes un array de 10 punteros a double. Cada uno de ellos apuntará a una fila de la matriz, asà que tienes 10 filas.
Ahora, a cada uno de ellos debes reservar su espacio. Como cada fila tiene 20 numeros (20 columnas), para cada uno de ellos reservamos 20 doubles
for (i=0; i<20; i++)
array[i] = (double *)malloc (20*sizeof(double));
Ya está.
Para liberar debes hacer igual, pero al revés. Primero liberar cada una de las filas con free (array[i])) y luego el array de punteros, con free (array).
Se bueno.
Es un poco liado hasta que se entiende, pero luego es sencillo.
Un array dinamico de dos dimensiones se puede pensar como un puntero a un array de punteros. Puedes declararlos asi
double **array;
Primero necesitas reservar sitio para el array de punteros. Imagina que quieres hacer una matriz de 10 filas y 20 columnas. Se puede hacer asi
array = (double **)malloc (10* sizeof(double *));
Ya tienes un array de 10 punteros a double. Cada uno de ellos apuntará a una fila de la matriz, asà que tienes 10 filas.
Ahora, a cada uno de ellos debes reservar su espacio. Como cada fila tiene 20 numeros (20 columnas), para cada uno de ellos reservamos 20 doubles
for (i=0; i<20; i++)
array[i] = (double *)malloc (20*sizeof(double));
Ya está.
Para liberar debes hacer igual, pero al revés. Primero liberar cada una de las filas con free (array[i])) y luego el array de punteros, con free (array).
Se bueno.
En el ejemplo que ha puesto chuidiang, hay un error, el for es hasta 10 no hasta 20, porque lo que recorres son las filas para ir reservando memoria para las columnas. La cosa quedaria:
double **array;
array = (double **)malloc (10* sizeof(double *));
for (i=0; i<10; i++)
array[i] = (double *)malloc (20*sizeof(double));
double **array;
array = (double **)malloc (10* sizeof(double *));
for (i=0; i<10; i++)
array[i] = (double *)malloc (20*sizeof(double));
