[C]: Scanf punteros (como si fuese P[i][j])

Iniciado por andie13, 17 Diciembre 2016, 11:07 AM

0 Miembros y 1 Visitante están viendo este tema.

andie13

Hola,
tengo una matriz definida con estructuras tal que
typedef struct{
   int filas;
   int columnas;
   int *datos; //**
}Matriz;


El caso es que después necesito leer los datos de la matriz, y quiero escanearlos en lo que sería equivalente en un array bidimensional M[fila][columna].

El código sería este:
Mi duda es, en el scanf, para hacerlo correctamente con punteros (también teniendo en cuenta de que pedimos el valor para la posición i+1, aunque deberíamos escanearlo en la 0,0).

Gracias!

Posdata: alguien me puede explicar por qué en la estructura definimos el entero *datos, o sea, que uso se le da?

void LerMatriz(Matriz *m)
{
   int i=0,j=0;
   
   for(i=0; i<m->filas; i++)
   {
       for(j=0; j<m->columnas; j++)
      {              
           printf("Valor para M(%d,%d) = ",i+1,j+1);
           scanf("%d",*((m+i)+j)); //AQUI ES DONDE NO SE COMO PONERLO
      }
   }
}

AnthonyS

En ese caso habría que poner

  scanf("%d",m+i+j);

El compilador a ver que es una variable puntero,la guardaría de forma correcta.

PD: El puntero a enteros datos,
esta para dirigirse a una dirección de memoria que contiene
el entero a utilizar o modificar(o apunta hacia el primer elemento de la matriz).
Espero haberte ayudado.
Un saludo.
Anthony.

MAFUS

Si puedos haz de datos un puntero a puntero y podrás usar de forma natural la notación de array de dos dimensiones.

andie13

Al final haciendo scanf("%d",(m->datos)+i*b+j);
me escanea e imprime perfectamente.
Pero gracias pro contestar!