Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ZedGe en 3 Diciembre 2011, 15:10 pm



Título: Pregunta Sobre Matriz y Doble Puntero
Publicado por: ZedGe en 3 Diciembre 2011, 15:10 pm
Bueno tengo la siguiente declaración,

Código:
int **matrizR;
matrizR[0][0]=0;
matrizR[0][1]=1;
matrizR[0][2]=2;
matrizR[0][3]=3;
matrizR[0][4]=4;
........................

1.- Como paso esa matriz como parámetro para una función?

Código:
int SumaColumnas(int *matrizR, int i , int j)

Me acuerdo haber encontrado que si se usa doble puntero el parámetro se pasa con 1 puntero, esta bien eso así?


2.- quiero hacer una suma pero me sale un error:
Citar
error: subscripted value is neither array nor pointer
supongo por que algo estoy sumando

Código:
 int suma=0;
suma=suma + matrizR[0][0];
suma=suma + matrizR[0][1];






Título: Re: Pregunta Sobre Matriz y Doble Puntero
Publicado por: naderST en 3 Diciembre 2011, 16:19 pm
Si es un puntero a puntero lo pasas como puntero a puntero, es decir, así:

Código
  1. int SumaColumnas(int ** matrizR, int i , int j)
  2.  

Recuerda que debes haber reservado memoria para esa matriz.


Título: Re: Pregunta Sobre Matriz y Doble Puntero
Publicado por: ZedGe en 3 Diciembre 2011, 17:35 pm
ok. si tengo la memoria reservada xD

gracias ahi me funciono el codigo entero


Título: Re: Pregunta Sobre Matriz y Doble Puntero
Publicado por: ZedGe en 3 Diciembre 2011, 20:23 pm
Al imprimir esa matriz que pase como parámetro el programa se cae, creo que no es la forma.


Título: Re: Pregunta Sobre Matriz y Doble Puntero
Publicado por: naderST en 3 Diciembre 2011, 20:26 pm
Como le reservas memoria a la matriz?


Título: Re: Pregunta Sobre Matriz y Doble Puntero
Publicado por: ZedGe en 3 Diciembre 2011, 20:32 pm
en el main tengo

Código:
int **matrizR;

matrizR = malloc(filas * sizeof *matrizR);   
    for (k = 0; k < m; k++){                 
     matrizResultadoR[k] = malloc(columnas * sizeof *matrizR[k]);
    }

y la inicializo con datos, luego pongo

Código:
Suavizado(**matrizR,filas,columnas);

y la recibo con

Código:
int Suavizado(int**matrizR, int m , int n){
matrizResultadoR = matrizR; //matrizResultadoR dentro de esta funcion tbn le doy //memoria de la misma forma
.....}


Título: Re: Pregunta Sobre Matriz y Doble Puntero
Publicado por: naderST en 3 Diciembre 2011, 20:54 pm
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define FILAS 4
  4. #define COLUMNAS 4
  5.  
  6. int ** matriz;
  7.  
  8. int main(void){
  9. register int i;
  10.  
  11. matriz = (int**)malloc(sizeof(int*)*FILAS);
  12.  
  13. for(i=0;i<FILAS;i++)
  14. matriz[i] = malloc(sizeof(int)*COLUMNAS);
  15.  
  16. return 0;
  17. }
  18.  


Título: Re: Pregunta Sobre Matriz y Doble Puntero
Publicado por: ZedGe en 3 Diciembre 2011, 20:58 pm
pero para eso yo necesito una determinada fila y columna, en este caso mis matrices son dinamicas


Título: Re: Pregunta Sobre Matriz y Doble Puntero
Publicado por: naderST en 3 Diciembre 2011, 21:10 pm
Reemplaza las macros FILAS y COLUMNAS por tus variables y listo.


Título: Re: Pregunta Sobre Matriz y Doble Puntero
Publicado por: ZedGe en 3 Diciembre 2011, 21:12 pm
El define se puede usar para variables?... por que yo estoy usando 2 archivos y mis matrices pueden ser de 50x50 o de 40x20 o de lo que sea por eso no he usado define


Título: Re: Pregunta Sobre Matriz y Doble Puntero
Publicado por: naderST en 3 Diciembre 2011, 21:19 pm
Me refiero que en vez de usar las macro que usé yo en mi código uses variables con el tamaño que necesites de la matriz.


Título: Re: Pregunta Sobre Matriz y Doble Puntero
Publicado por: ZedGe en 3 Diciembre 2011, 21:26 pm
El problema no es la asignación de memoria, mi matriz dentro del main funciona, pero al pasarla como parámetro para una función de otro archivo dentro de mi proyecto la matriz no la puedo ver, es decir, si imprimo la posición 1,1 se cae el programa


Título: Re: Pregunta Sobre Matriz y Doble Puntero
Publicado por: naderST en 3 Diciembre 2011, 21:31 pm
El problema es la manera en que le pasas la matriz cuando llamas a la función.

Código
  1. Suavizado(**matrizR,filas,columnas);

Le estas pasando un entero cuando deberías pasarle un puntero a puntero a entero de esta manera:

Código
  1. Suavizado(matrizR,filas,columnas);


Título: Re: Pregunta Sobre Matriz y Doble Puntero
Publicado por: ZedGe en 3 Diciembre 2011, 21:32 pm
Eso era... muchísimas gracias, me pondré a estudiar punteros, gracias