Autor
|
Tema: Duda acerca de como pasar por referencia matrices dinamicas? (Leído 5,407 veces)
|
xuhipoint
Desconectado
Mensajes: 13
|
#include <iostream> using namespace std; void llenar_matriz(int fil, char &matriz[][col]){ int i,j ; for (int i = 0; i < fil; i++){ for (int j = 0; j < col; j++){ cin >> matriz[i][j]; } } } void Mostrar_matriz(int fil, char &matriz[][col] ){ int i,j; for (i = 0; i < fil; i++) { for ( j = 0; j < col; j++){ cout << matriz[i][j] << " "; cout << endl; } } } int main() { int fil, col ; cout << "Dimensiones del tablero: "; cin >> fil >> col; char matriz[fil][col]; }
Hola espero que estén bien, esta es mi idea de como pasar una matriz por referencia en una acción pero no entiendo porque no funciona, esto es lo que he entendido viendo videos y documentos, seria de gran ayuda que me dijeran en que me equivoco, ya que no puedo usar punteros esta fue mi idea. Gracias de antemano por sus respuestas.
|
|
|
En línea
|
|
|
|
Blaster
Desconectado
Mensajes: 190
|
como pasar una matriz por referencia en una acción pero no entiendo porque no funciona
Debes tener encuenta que cuando se pasa uan matriz a una función, esta siempre se pasa por referencia ya que su nombre hace referencia al primer elemento de la misma, es innecesario utilizar el operador (&) por lo que te he comentado anteriormente. El numero de columnas la debes indicar explicitamente para que el compilador conozca la dimensión de la matriz..
|
|
|
En línea
|
|
|
|
mr.blood
Desconectado
Mensajes: 150
|
Aparte de lo que ya te han dicho, col y fil están declaradas dentro del ambito de main, no de forma global. Aun así, te recomiendo que trabajes más con punteros y memoria dinámica, porque tal y como lo planteas te dará dolores de cabeza.
Sa1uDoS
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Sin punteros ni asignación dinámica de memoria, una forma sería pre dimensionar la matriz para que la función tenga el tamaño de la misma, con el desperdicio de memoria que eso supone:#include <iostream> using namespace std; #define FIL 10 #define COL 11 void llenar_matriz(int fil, int col,char matriz[][COL]){ int i,j; for ( i = 0; i < fil; i++) for ( j = 0; j < col; j++){ cout << endl << "matriz[" <<i<< "][" << j << "]="; cin>>matriz[i][j]; } } void Mostrar_matriz(int fil, int col,char matriz[][COL] ){ int i,j; for (i = 0; i < fil; i++){ for ( j = 0; j < col; j++) cout << matriz[i][j]<<" " ; cout << endl; } } int main(){ int fil,col; char matriz[FIL][COL]; cout << "Dimensiones del tablero : "<< endl; cout << endl<< "Filas del tablero(menor 11): "; cin >> fil ; cout << endl<< "Columnas del tablero(menor 11): "<< endl; cin >> col; llenar_matriz(fil,col,matriz); cout << endl; Mostrar_matriz(fil,col,matriz); return 0; }
¡¡¡¡ Saluditos! ..... !!!!
|
|
« Última modificación: 8 Mayo 2014, 14:27 pm por leosansan »
|
En línea
|
|
|
|
xuhipoint
Desconectado
Mensajes: 13
|
Gracias a todos por sus respuestas, al final lo que hice fue esto: Es muy parecida a la tuya leosansan pero fue la unica idea que se me ocurrio para no utlizar punteros. #include <iostream> using namespace std; int M[20][20]; void llenar(int fil,int col,int M[][20]){ int i,j; for(i=0;i<fil;i++){ for(j=0;j<col;j++){ cout<<"["<<i<<"]"<<"["<<j<<"]"<<endl; cin>>M[i][j]; } } cout<<endl; } void mostrar(int fil, int col, int M[][20]){ int i,j; for(i=0;i<fil;i++){ for(j=0;j<col;j++) cout<<M[i][j]<<" "; cout<<endl; } } int main(){ int fil,col; cout<<"Ingrese fila y columna"<<endl; cin>>fil>>col; llenar(fil,col,M); mostrar(fil,col,M); }
|
|
|
En línea
|
|
|
|
MeCraniDOS
Desconectado
Mensajes: 337
Sr. Glass
|
Gracias a todos por sus respuestas, al final lo que hice fue esto: Es muy parecida a la tuya leosansan pero fue la unica idea que se me ocurrio para no utlizar punteros.
Estas usando punteros de todas formas. Esto void Funcion(int Matriz[])
Es equivalente a esto void Funcion(int *Matriz)
Al pasar una matriz a una funcion lo unico que haces es mandarle un puntero con la posicion de memoria donde empieza la matriz, por eso todo lo que modifiques en la matriz de la funcion, lo estas modificando en la matriz declarada en el main. void Funcion(int *Matriz); int main() { int Matriz[5]={0}; //Inicializas todo a cero Funcion(Matriz); //Aqui Matriz[0] ya vale 1 return 0; } void Funcion(int *Matriz) { Matriz[0] = 1; }
|
|
|
En línea
|
"La física es el sistema operativo del Universo" -- Steven R Garman
|
|
|
xuhipoint
Desconectado
Mensajes: 13
|
Si al final es lo mismo, lo que pasa es que en mi universidad no quieren que use puntero porque todavía no me lo han dado por eso al final hice eso.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
duda matrices dinámicas multidimencionales
Programación Visual Basic
|
:matux:
|
1
|
1,908
|
20 Agosto 2007, 14:03 pm
por :matux:
|
|
|
¿Cómo puedo pasar dos enteros por referencia?
Java
|
theluigy13etv
|
2
|
3,013
|
16 Abril 2012, 20:04 pm
por theluigy13etv
|
|
|
Matrices dinámicas en C
Programación C/C++
|
thekill01
|
3
|
4,829
|
22 Mayo 2012, 02:06 am
por icoheed
|
|
|
Pasar matriz char a una función como referencia
Programación C/C++
|
KISKE
|
2
|
7,758
|
18 Junio 2013, 13:07 pm
por KISKE
|
|
|
[Duda] Pasar struct por referencia
Programación C/C++
|
jaxoR
|
9
|
5,960
|
27 Agosto 2014, 02:50 am
por rir3760
|
|