Autor
|
Tema: Duda con matrices y paso por parametro (Leído 7,957 veces)
|
patilanz
Desconectado
Mensajes: 481
555-555-0199@example.com
|
Hola se que para pasar matrices hay que indicar la longitud de la columna pero no se porque ya que en la memoria están organizados uno a continuación del otro. Mi pregunta es como sabe c++ o el compilador el tamaño de las filas ?
Saludos
|
|
|
En línea
|
|
|
|
engel lex
|
por el tipo de variable....
columna = memoria_inicial + tamaño_de_la_variable*posicion
fila = memoria_inicial + tamaño_de_la_variable*cantidad_de_columnas*posicion
esa es la teoria, creo...
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
El motivo es porque la memoria en el caso de las matrices se alinea por columnas ( o filas, depende de cómo se mire ). Me explico. Si defines una matriz tal que int matriz[3][2]; en memoria se crea el siguiente mapa: [0,0][1,0][2,0][0,1][1,1][2,1] Como se ve, el tamaño de cada "bloque" se corresponde con el primer valor ( filas o columnas a gusto del consumidor )... el segundo valor determina el número de bloques. Al compilador le da igual (por que no lo va a comprobar) cual es el tamaño real del buffer. Únicamente necesita conocer el tamaño de cada "bloque" para poder calcular el desplazamiento ... el número de bloques es irrelevante para él... si te pasas ya se encargará el SO de darte un par de collejas.
|
|
|
En línea
|
|
|
|
vangodp
Desconectado
Mensajes: 455
|
a ver jeje cada vez que veo algo sobre matrices me lio mas y eso que ja lo tengo entendio El orden es el tuyo o es este por que en el vídeo este el la pinta así y ahora me lio XD: https://www.youtube.com/watch?v=TEyLHaTFGEU[0,0][0,1] [1,0][1,1] [2,0][2,1] [col][fil] [col][fil] [col][fil] [0,0][0,1][1,0][1,1][2,0][2,1] |------------------------------> ¿No? [0,0][0,1] [1,0][1,1] [2,0][2,1] así no?? o puede que lo aya entendió mal no se XDD
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Cierto, me confundí con fortran.
En cualquier caso, el fundamento es el mismo... en el caso de una matriz bidimensional tienes que proporcionar el tamaño del bloque, da igual que sea filas o columnas.
En el caso de un vector no es necesario indicar ningún tamaño porque no hay bloques... solo un buffer de tamaño desconocido para el compilador ( no olvidemos que el parámetro que se pasa no deja de ser un puntero, independientemente de que el argumento sea un vector o una matriz )
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
para pasar matrices hay que indicar la longitud de la columna pero no se porque Porque es parte del tipo. Lo que tu llamas matriz es un array donde cada uno de sus elementos es también un array. Por ejemplo con la sentencia: int mat[N][M];
Se declara el array "mat" de N elementos cada uno de tipo "int [M]". Mi pregunta es como sabe c++ o el compilador el tamaño de las filas ? No lo sabe. Si declaras una función en cualquiera de las dos formas: /* A */ int fn(int a[N]); /* B */ int fn(int a[ ]);
La declaración en realidad es: /* C */ int fn(int *a);
Ello porque los arrays no se pasan por valor, en su lugar el argumento es la dirección en memoria del primer elemento. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Te pide el tamaño de la fila para que el compilador pueda hacer la conversión matriz -> array internamente.
|
|
|
En línea
|
|
|
|
vangodp
Desconectado
Mensajes: 455
|
A ver compañeros gracias por aclarar que hasta yo me lio con eso XDD Si creo una matriz que digamos así: int matriz [][]; Y quiero que la columna sea matriz [columna][] y la fila matriz[][fila] tal que quede matriz[columna][fila];¿a la funcion como le paso eso? ¿asi? int funcion ( int matriz[ ][tamaño de la fila], int columna){...} Por que tengo un lio de copón como los demás aquí, con tanta filafila columna columna y cada uno lo llama como le gusta XDD
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Tamaño fila debe conocerse durante la compilación. Por lo que no puede ser una variable global que tengas por ahi (aunque una constante si valdria). Si estas en C++. Puedes hacer un vector de vector. Asi no te lias
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Si os sirve de algo, int funcion ( int matriz[][], int fila, int columna){...}
es lo mismo que int funcion ( int **matriz, int fila, int columna){...}
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Paso de flujos por parametro
Programación C/C++
|
darkvidhack
|
3
|
2,708
|
17 Mayo 2011, 22:48 pm
por satu
|
|
|
Paso de parametro por referencia
Programación C/C++
|
abad023
|
5
|
3,401
|
6 Diciembre 2011, 08:21 am
por x64core
|
|
|
duda del parametro -d en iptables
Seguridad
|
sancakoky
|
2
|
2,589
|
23 Marzo 2012, 12:12 pm
por adastra
|
|
|
sfml paso por parametro de window
Programación C/C++
|
patilanz
|
0
|
1,749
|
18 Octubre 2014, 19:24 pm
por patilanz
|
|
|
Problema con Paso de Tablas Bidimensionales como parámetro
Programación C/C++
|
jamatbar
|
1
|
2,283
|
10 Diciembre 2014, 16:21 pm
por Eternal Idol
|
|