Puede una funcion devovler varios valores?

Started by gecko, January 18, 2010, 11:01:03 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

gecko

Bueno, esa es la duda que tengo... tengo entendido que se puede, pero no se bien como hacerlo.

Lo que quiero es hacer, por ejemplo, una funcion MOVER a la que se le pasen 4 valores, y devuelva otros 2.

Se podria hacer algo asi:

[code language="bennu" options="singleline"]MOVER (POS_X, POS_Y, VEL_X, VEL_Y, NUEVA_POS_X, NUEVA_POS_Y);[/code]

pero que NUEVA_POS_X, y NUEVA_POS_Y sean de salida y no de entrada?
Torres Baldi Studio
http://torresbaldi.com

Windgate

Por supuesto:

FUNCTION mover ( int POS_X, int POS_Y, int VEL_X, int VEL_Y, int POINTER NUEVA_POS_X, int POINTER NUEVA_POS_Y );

Y dentro de la función mover DEBES acceder a nueva_pos_x y nueva_pos_y con el prefijo *, por ejemplo así:

(*NUEVA_POS_X) = 1;

Debes tener en cuenta que para invocar a la función debes hacer:

mover ( variable1 , variable2 , variable3 , variable4 , &resultado1 , &resultado2 );

El símbolo & indica que no pasas el valor de la variable, sino la referencia, su posición en memoria.

RESUMEN:

1) El parámetro de la función mover() ya no es un simple entero (int) sino la dirección de memoria donde se guarda un entero (int POINTER).
2) Para modificar el contenido de esa dirección de memoria desde la función mover() se hace referencia a ella con el prefijo *
3) Para pasar una variable como parámetro a mover() y que pueda ser modificada no debes pasar el nombre de la variable sin más (Eso es un simple int) sino que debes pasar la variable con el prefijo &, que indica que pasas la dirección de memoria de ese entero.

Si has tenido experiencia previa con punteros de C lo entenderás a la primera, si no te tocará probar un poquito, el tema de punteros la primera vez es "raro", luego lo entiendes y es como montar en bici... O como montar a una bella mujer, nunca se olvida :D
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

gecko

Muchisimas gracias!

Algo de la teoria de punteros sabia, pero no exactamente como hacerlo en Bennu.

Gracias por la explicacion, Karma++!
Torres Baldi Studio
http://torresbaldi.com