• Domingo 15 de Diciembre de 2024, 07:03

Autor Tema:  Duda con int ** en matriz dinámica  (Leído 1184 veces)

Bool

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Duda con int ** en matriz dinámica
« en: Martes 30 de Septiembre de 2008, 21:26 »
0
Tenemos creado en memoria (con malloc) esté array dinámico cuyos elementos son de tipo enteros:
Código: Text
  1.  
  2. 2 3
  3. 1 4
  4.  
  5.  
El proceso de creación ha sido... asignamos memoria para un vector de punteros a enteros... algo así como:
Código: Text
  1.  
  2. int **pam = (int **)malloc(2 * sizeof(int *));
  3.  
  4.  
y luego asignamos memoria para cada fila del array:
Código: Text
  1.  
  2. for (i = 0; i < 2; i++) {
  3.     pam[i] = (int *)malloc(2 * sizeof(int));
  4.  
  5.  
también hay una variable tipo estructura cuya definición es:
Código: Text
  1.  
  2. typedef struct matriz
  3. {
  4.     int filas;
  5.     int columnas;
  6.     int **pmatriz;
  7. }tmatriz;
  8. tmatriz var1;
  9.  
  10.  
esta estructura tiene los datos de la matriz dinámica que se ha creado.

si tenemos un puntero que apunta a var1...
Código: Text
  1.  
  2. tmatriz *pvar1 = &var1;
  3.  
  4.  
podemos saber las filas del array haciendo por ejemplo...
Código: Text
  1.  
  2. printf("%d", pvar1->filas));
  3.  
  4. pvar1->pmatriz apuntaría a pam
  5.  
  6.  
Entonces, si quiero leer datos de la matriz podría hacer un bucle así:
Código: Text
  1.  
  2. for( i = 0; i < pvar1->filas; i++) {
  3.     for(j = 0; j < pvar1->columnas; j++) {
  4.         printf("%d", pvar1->pmatriz[i][j]);
  5.        
  6.  
Pero si quiero introducir datos nuevos en mi matriz dinamica, a la hora de leer con:
   
Código: Text
  1.  scanf("%d", pvar1->&matriz[i][j]);
  2.  
   
El compilador se queja :(
 
lo que he hecho es declarar una nueva variable de tipo puntero a puntero a entero y que
 contenga la dirección de memoria de pvar1->pmatriz, y luego meter los datos usando esa nueva variable
 evitando tener que usar la notación con la estructura. Es decir, algo así:
 
Código: Text
  1.  
  2.  int **pmat2 = pvar1->pmatriz;
  3.  
  4.  
 y Luego ya puedo hacer esto
 
Código: Text
  1. scanf("%d", &pmat2[i][j]);
  2.  
 
 Mi duda es como hacerlo de la primera forma, es decir así:
 
Código: Text
  1. scanf("%d", pvar1->&matriz[i][j]);
  2.  
pero correctamente claro xD
 
 Perdón por el rollo; espero que se entienda algo jaja
 
 Gracias anticipadas!

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Duda con int ** en matriz dinámica
« Respuesta #1 en: Miércoles 1 de Octubre de 2008, 03:22 »
0
Cita de: "Bool"
  Mi duda es como hacerlo de la primera forma, es decir así:
 
Código: Text
  1. scanf("%d", pvar1->&matriz[i][j]);
  2.  

El problema es que tu sintaxis esta incorrecta, aparte de que pusiste matriz, en lugar de pmatriz, la sintaxis deberia ser:

Código: C
  1.  
  2.     scanf("%d", &pvar1->pmatriz[i][j]);
  3.  
  4.  

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Bool

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Duda con int ** en matriz dinámica
« Respuesta #2 en: Miércoles 1 de Octubre de 2008, 03:30 »
0
Juas que zoquete me siento... mira que no haber visto el fallo, para matarme  :(

Muchas gracias por la ayuda  :beer:

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Duda con int ** en matriz dinámica
« Respuesta #3 en: Miércoles 1 de Octubre de 2008, 03:32 »
0
Cita de: "Bool"
Juas que zoquete me siento... mira que no haber visto el fallo, para matarme  :(

Muchas gracias por la ayuda  :beer:
No te preocupes, creo que a todo programador le ha pasado algun fallo de este tipo, a veces le damos vueltas y vueltas, y se nos van los errores mas simples  :blink:

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================