Duda respecto a punteros y matrices c++

H

Buenos días.

Hace poco me hicieron una pregunta respecto a un ejemplo de pasar una matriz por punteros a una función y no recuerdo como se hacía. El error me lo da a la hora de llamar a la función. ¿Podrá alguien resolverme la duda sobre el código? (He borrado parte del codigo para dejar la parte que me interesa, realmente era un ejemplo simple de suma de matrices).

Gracias de antemano y un saludo.

#include <stdio.h>

void MultiplicarMat(float a[][5],float b[][5],float *c[][5]);


int main(){

int i,j,l,k;
float mat1[5][5],mat2[5][5],resul[5][5],*p;

i=j=0;
p=&resul[0][0];
k=l=0;



for(i=0;i<5;i++){
    for(j=0;j<5;j++){
         printf("Introduce el elemento %d %d de la primera matriz n",i,j);
         scanf("%f",&mat1[i][j]);
    }
}

for(k=0;k<5;k++){
    for(l=0;l<5;l++){
         printf("Introduce el elemento %d %d de la segunda matriz n",k,l);
         scanf("%f",&mat2[k][l]);
    }
}

MultiplicarMat(mat1, mat2, &resul);



}

void MultiplicarMat(float a[][5],float b[][5],float *c[][5]){

int i,j,k;
i=j=k=0;
*c[0][0]=0;

}
VipeR_CS

Pon en código entre los tags [ code ] y [ /code ] para mantener la estructura.

skv

Creo que es por la precedencia de operandos, cambia c[][5] por (c)[][5] y lo mismo cuando accedes en la función.

LOc0

Las matrices se pasan siempre por referencia (en realidad es una "falsa referencia" usando un puntero, porque en C/C++ a nivel de compilador todo se pasa por valor).

//Prototipo
void sumar_matrices(float [][10], float [][10], float [][10]);

y para llamarla:

float a[5][10], b[5][10], res[5][10];

//Rellenas valores de a y b

sumar_matrices(a, b, res);

http://www.zator.com/Cpp/E4_3_8.htm

PD:

float *c[][]; //Matriz de punteros a float

float c[][]; //Matriz de float

Salu2 ;)

1 respuesta
skv

#4 En realidad eso no es del todo cierto, si quieres reservar memoria dinámicamente para la matriz dentro de la función tienes que pasar una referencia a la misma, por ejemplo.

1 respuesta
LOc0

#5

¿Y? En ese caso le tendrás que enviar a la función un puntero triple, pero #1 no utiliza matrices dinámicas...

spoiler

Salu2 ;)

Usuarios habituales