elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Matrices dinámicas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Matrices dinámicas  (Leído 2,279 veces)
MPLS

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Matrices dinámicas
« en: 3 Noviembre 2015, 22:36 pm »

Hola, me gustaria saber como definir una matriz de char en C de la siguiente forma:


char matriz[ num ][20]

 (se que no se debe de declarar así sino con punteros, es para que lo visualicéis mas fácilmente)

Siendo num una variable del programa y 20 un numero fijo.

Es decir, con una dimensión fija y la otra dinámica, estoy intentando usar calloc() pero no se como "referirme" a cada una de las dimensiones. ¿Alguien me puede enviar un mini-fragmento de código haciéndolo?




« Última modificación: 3 Noviembre 2015, 22:41 pm por MPLS » En línea

A.I.

Desconectado Desconectado

Mensajes: 61


Ver Perfil
Re: Matrices dinámicas
« Respuesta #1 en: 4 Noviembre 2015, 00:54 am »

Cuando usas malloc simplemente estás reservando memoria consecutiva, no tiene dimensiones, etc. Por lo tanto para reservarla simplemente haz el malloc de num * 20.
Luego eres tú el que, si quieres, tienes que tratarla como una matriz.


En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Matrices dinámicas
« Respuesta #2 en: 4 Noviembre 2015, 02:34 am »

Hola MPLS,

Cuando usas malloc simplemente estás reservando memoria consecutiva, no tiene dimensiones, etc. Por lo tanto para reservarla simplemente haz el malloc de num * 20.
Luego eres tú el que, si quieres, tienes que tratarla como una matriz.

Tal y como te ha dicho A.I., esa es una de las maneras en la que puede hacerse lo que pides. Esto lo harías más o menos así:

Código
  1. int filas = 3, columnas = 3;
  2. int* m = malloc(filas*columnas*sizeof(int));

De esta manera, si consideras que las filas se cuentan como 0, 1, ...., TOTAL_FILAS-1 y las columnas como 0, 1, ..., TOTAL_COLUMNAS-1, el índice de un elemento de la matriz vendrá dado por:

Código:
indice = fila * TOTAL_COLUMNAS + columna

Por ejemplo, si tienes una matriz 3x3, para acceder al elemento en la fila 0 y la columna 2, tendrías que hacer m[0*3+2] = m[2]. Si quieres acceder al elemento en la fila 2 y la columna 1, sería m[2*3+1] = m[7].

La otra manera de hacerlo es tratar a cada fila como un puntero a un array de N elementos, donde N son las columnas. Esto sería algo así:
Código
  1. int i, filas = 3, columnas = 3;
  2. int** m = malloc(filas*sizeof(int*));
  3. for (i=0; i<filas; i++) m[i] = malloc(columnas*sizeof(int));

En este caso, el acceso a un elemento de la matriz es más sencillo. Para acceder al elemento en la fila 0 y la columna 2 basta con hacer m[0][2]. Si quisieras acceder al elemento en la fila 2 y la columna 1 deberías hacer m[2][1].

Fíjate en ambos ejemplos el tipo de las variables usadas. En el primer caso, m es un puntero a entero; mientras que en el segundo caso m es un puntero a un puntero a entero.

Espero que te sirva de ayuda, un saludo!
En línea

crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: Matrices dinámicas
« Respuesta #3 en: 4 Noviembre 2015, 04:31 am »

Código:
No olvides usar free para liberar la memoria, cuano se  un array de una sola dimension solo basta con

[code=c]free(arreglo)

pero cuando sean arrays de mas de  una dimension hacer
Código
  1. //esto solo es valido para array bidimensionales
  2. for(int i; i<columna;i++) free(arreglo[i]);//liberamos internamente
  3. free(arreglo);
[/code]
En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda matrices dinámicas multidimencionales
Programación Visual Basic
:matux: 1 1,920 Último mensaje 20 Agosto 2007, 14:03 pm
por :matux:
Matrices dinámicas en C
Programación C/C++
thekill01 3 4,863 Último mensaje 22 Mayo 2012, 02:06 am
por icoheed
(Problema)Matrices Dinámicas de Caracteres!
Programación C/C++
Reynega 4 4,846 Último mensaje 6 Marzo 2015, 18:33 pm
por avesudra
suma de dos matrices dinamicas con punteros
Programación C/C++
piyor6 2 5,655 Último mensaje 6 Mayo 2018, 17:27 pm
por piyor6
Problema en C que no puedo resolver, Malloc y matrices dinámicas
Programación C/C++
i7Savage 3 2,505 Último mensaje 29 Junio 2019, 12:08 pm
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines