Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Duda Sobre Paso Por Referencia Y Paso Por Valor...

Iniciado por Douch, 18 de Marzo de 2004, 12:44:22 PM

« anterior - próximo »

Douch

 Bueno, tengo una pequeña duda acerca de como un lenguaje de programación (sea cual sea) actua frente al paso de matrices por Referencia o por Valor, y me gustaría que me lo pudieseis aclarar, o simplemente confirmar mi teoría.

La verdad es que nunca me lo había planteado, y en el Ciclo Formativo a uno no le explican éstas cosas. Se que cuando se pasa por Referencia, lo que haces es enviar la dirección de memoria de esa variable, en vez del valor de ésta, y que por Valor, se pasa el valor (valga la redundancia). Pero, ¿qué ocurre cuando son matrices?. Se que una matriz son variables que poseen direcciones de memoria consecutivas, y que se puede acceder al siguiente elemento sumando un número a la posición actual. Supongo que por Valor se pasará una copia de toda ella pero, ¿y por referencia?. ¿Se pasa la dirección de memoria del primer elemento y accedes al resto a partir de ahí?.

Se que es algo muy básico, y que debería saberlo, pero como dijo alguien en su día:
" Es mejor preguntar, y ser ignorante durante cinco minútos, que callarselo y serlo toda la vida".

Douch.

Mars Attacks

 Creo que cuando trabajas con una matriz o un vector, no se lo pasas "por valor", sino que le pasas un puntero al primer elemento de ese vector o de esa matriz. Remarco el "creo", estoy modorril y no pondría la mano al fuego :)

Gawl_111

 Asi es Douch, al pasar por referencia una matriz en la llamada a la función le pasas la direccion de memoria del primer elemento del array o matriz. Y luego en la declaracion defines un puntero a esa direccion de memoria y es con lo k trabajas.

Salu2.

Gawl.

jpastor

 Cuando pasas por valor pasas, como tu dices, el valor. Lo que se hace es una copia asi que tiene el mismo valor pero esta en una direccion de memoria diferente. Cuando pasas por referencia se usa el mismo dato (direccion y logicamente valor).

Un array declarado tal como int pepe[10]; reserva una zona de memoria consecutiva para guardar 10 elemento, pero en pepe (que es en realidad un puntero) se almacena una direccion, la del primer elemento. Su le pasas pepe por valor a una funcion lo que se hace es crear un puntero copia (apunta a la misma direccion que pepe) y si lo pasa por referencia le pasas el puntero pepe en si.

Espero haberte ayudado, aunque estoy mirando y me he liado un poquillo  (nooo)  

samsaga2

 Esto son solo observaciones mias nunca me he puesto a mirarlo:

En caso de CPU de 32 bits (como la de nuestros pentiums 4) si intentas pasar una varible de mas de 32bits a una funcion realmente esta pasando el puntero a la region donde esta guardada la variable (en la pila si es una variable local a una funcion o a un segmento de datos si es una variable general).

Eso se hace por dos razones, el tamaño de la pila es limitado (no podriamos guardar una matriz grande por ejemplo) y es mas rapido guardar y darle la direccion a la funcion que no meterlo todo en la pila y tener que sacarlo luego.

He dicho, criticas a /dev/null  (twist)

Repito que es tan solo una observacion deducida por el uso de compiladores.

Douch

 Gracias a todos los implicados por haber dedicado un poco de vuestro preciado tiempo a responderme el post. :)
Ya lo he pillado.

Salu2.

Douch.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.