elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con matrices y paso por parametro
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Duda con matrices y paso por parametro  (Leído 7,227 veces)
patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Duda con matrices y paso por parametro
« en: 22 Abril 2014, 07:51 am »

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
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #1 en: 22 Abril 2014, 07:57 am »

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 Desconectado

Mensajes: 1.248


Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #2 en: 22 Abril 2014, 08:50 am »

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:

Código:
[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 Desconectado

Mensajes: 455



Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #3 en: 22 Abril 2014, 15:49 pm »

a ver jeje cada vez que veo algo sobre matrices me lio mas y eso que ja lo tengo entendio  ;D

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??  :huh:
o puede que lo aya entendió mal no se XDD
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #4 en: 22 Abril 2014, 16:31 pm »

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 Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #5 en: 22 Abril 2014, 16:46 pm »

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:
Código
  1. 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:
Código
  1. /* A */ int fn(int a[N]);
  2. /* B */ int fn(int a[ ]);
La declaración en realidad es:
Código
  1. /* 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 Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #6 en: 22 Abril 2014, 17:28 pm »

Te pide el tamaño de la fila para que el compilador pueda hacer la conversión matriz -> array internamente.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #7 en: 22 Abril 2014, 17:54 pm »

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 :laugh:
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #8 en: 22 Abril 2014, 18:22 pm »

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

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda con matrices y paso por parametro
« Respuesta #9 en: 22 Abril 2014, 22:04 pm »

Si os sirve de algo,
Código
  1. int funcion ( int matriz[][], int fila, int columna){...}

es lo mismo que


Código
  1. int funcion ( int **matriz, int fila, int columna){...}
En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Paso de flujos por parametro
Programación C/C++
darkvidhack 3 2,477 Último mensaje 17 Mayo 2011, 22:48 pm
por satu
Paso de parametro por referencia
Programación C/C++
abad023 5 3,091 Último mensaje 6 Diciembre 2011, 08:21 am
por x64core
duda del parametro -d en iptables
Seguridad
sancakoky 2 2,411 Último mensaje 23 Marzo 2012, 12:12 pm
por adastra
sfml paso por parametro de window
Programación C/C++
patilanz 0 1,592 Último mensaje 18 Octubre 2014, 19:24 pm
por patilanz
Problema con Paso de Tablas Bidimensionales como parámetro
Programación C/C++
jamatbar 1 2,065 Último mensaje 10 Diciembre 2014, 16:21 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines