C/Visual C - Matrices y punteros

 
Vista:

Matrices y punteros

Publicado por Rafael (1 intervención) el 14/05/2007 19:39:57
Hola a todos,
antes de nada quería dar la enhorabuena por el foro, que nos ha solucionado numerosos problemas a más de uno.

La duda que tengo consiste en lo siguiente: estoy escribiendo un código para realizar algunas operaciones con matrices estocásticas, para ello he definido algunas matrices dobles y punteros dobles a dichas matrices. La duda que tengo aparece a la hora de referenciar los punteros a las matrices ya definidas. He leido que una matriz no es otra cosa que un puntero al primer elemento del array, por lo tanto, si yo quiero asignar el valor de una matriz a un puntero doble he supuesto que yo solo tendría que igualar la direccion a la que apuntan de la siguiente manera:

double **p;
double mat[5][5];

p = mat;

pero me da el siguiente mensaje de error al compilar "aviso: asignación desde un tipo de puntero incompatible".
También he probado a hacerlo de la siguiente manera:

p = &(*(mat)[0][0]);

pero aparece el siguiente mensaje de error al compilar "error: el valor indicado por el subindice no es ni matriz ni puntero".

Tengo que decir que para trabajar con el puntero doble he realizado reserva dinamica de memoria mediante las funciones 'malloc' y 'sizeof'. Si alguien está interesado en ver el código no tendré problema en enviárselo.

Gracias por todo de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Matrices y punteros

Publicado por Tom (27 intervenciones) el 14/05/2007 20:37:45
Bueno. Una tabla de más de una dimensión que has creado con calloc's y malloc's no es necesariamente una zona contigua de memoria.

Y, además, si lo piensas bien:

double **p es un puntero a un puntero a un double.
double mat[5][5] es (definido así) un puntero a una zona de 25 double's.

Para estos problemas algunos compiladores son más flexibles que otros y tendrás "soluciones" más o menos apropiadas.

Yo intentaría de la manera más simple:

double *p = (double *)mat;
ó
double *p =(double *)(&mat[0][0]);

pero esto te genera otro problema ... y es que no puedes desreferenciar así:

double x = p[3][4];

ya que el compilador ha "perdido" las dimensiones de la matriz (y en tiempo de ejecución por supuesto tampoco las conoce).

Tendrías que hacer tú los cálculos en base a las dimensiones (fijas o en variables):

double x = p[dim1 * 3 + 4];
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Matrices y punteros

Publicado por asd (7 intervenciones) el 21/05/2007 02:54:56
WWW.CODE-VISUAL.BLOGSPOT.COM ACA ENCONTRARAS CURSOS , FOROS , CGUIAS , CODIGOS FUENTES , HAY UN CHAT RELACIONADO CON LA PROGRAMACION , ETC TE LA RECOMIENDO GRACIAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Matrices y punteros

Publicado por asdsd (7 intervenciones) el 21/05/2007 02:55:56
WWW.CODE-VISUAL.BLOGSPOT.COM ACA ENCONTRARAS CURSOS , FOROS , CGUIAS , CODIGOS FUENTES , HAY UN CHAT RELACIONADO CON LA PROGRAMACION , ETC TE LA RECOMIENDO GRACIAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar