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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como regreso mas de un variable de una funcion con un apuntador??
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: como regreso mas de un variable de una funcion con un apuntador??  (Leído 5,949 veces)
hugodavidx

Desconectado Desconectado

Mensajes: 1


Ver Perfil
como regreso mas de un variable de una funcion con un apuntador??
« en: 28 Febrero 2014, 00:12 am »

como puedo regresar mas  de un valor con un apuntador usando una funcion que retorne una sola variable o en este caso un apuntador q contenga 2 diferentes valores


En línea

EzianGES

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: como regreso mas de un variable de una funcion con un apuntador??
« Respuesta #1 en: 28 Febrero 2014, 01:11 am »

¿De dónde sacás el ejercicio? ¿qué tenés hecho hasta ahora?
Me hace acordar a uno del libro Jumping intro C++
¿Podrías darnos el ejercicio a ver si dice eso?  Me interesaría verlo.

Un abrazo :)


En línea

patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Re: como regreso mas de un variable de una funcion con un apuntador??
« Respuesta #2 en: 28 Febrero 2014, 08:28 am »

Se puede pero con una clase.
En línea

vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: como regreso mas de un variable de una funcion con un apuntador??
« Respuesta #3 en: 28 Febrero 2014, 08:44 am »

Para eso se utilizando una acción (Función que no devuelve nada).
http://www.youtube.com/watch?v=1lk3hMqk0Tw
https://www.youtube.com/watch?v=cicFrj4TRJ0
https://www.youtube.com/watch?v=8g9bdT005a8

Busque como pasar parámetros por referencia y por puntero.
Si haces una función que devuelva datos con return solo vas a poder devolver un valor por que la función se da por terminado justo en el return.

A cambio si haces una función que no retorne nada y pases los parámetros por punteros y/o referencias, puedes hacer un calculo(a mas) por ejemplo y el resultado lo devuelve justo a la dirección de memoria de la variable que has pasado a la función.
O sea, seria algo así como: Yo indico 2 o mas números a una acción para a hacer un par de operaciones para que me devuelva 2 resultados y envés de pasar parámetros normalmente(copiar esos datos en la función) estoy diciendo que las modifique donde están, sin hacer copias de esos datos y después tener que guárdalos.
Eso se hace por que indico en que posición de la memoria están las variables, la acción va hace el calculo y modifica el numero allá donde este y no necesito hacer return.
Normalmente con una función tendría que guardar el resultado nuevamente en una variable de esta manera y no obtendría solo un valor.
Un ejemplo de una acción con parámetros por referencia seria:
int resultado = funcionsumar(A,B);
Suponemos que esta función suma 2 valores pasados y hace el return, el paso siguiente seria o imprimir con acción (función que no devuelve nada es una acción) o guardar el valor y despues imprimir o hacer lo que sea con ese valor.

Vamos a ver con la accion:supongamos que en main tengo esas 3 variables.
int A=10;
int B=30;
int C=40
int resultado1= 0;
int resultado2 = 0;

Y ahora vemos nuestra acción:
void accion( int& a, int& b, int& c, int& r1, int& r2 ){//Parámetros por referencia
   r1 = a + b;
   r2 = c - 13;
}
Ya he devuelto los resultados(fácil ¿no?), no necesito return por que la acción no retorna nada, sino que hace directamente los calculos sobre los valores pasados por referencia modificando los allí mismo donde estan.

llamaríamos la acción de igual manera que la función si es por referencia:
accion(A, B, C, resultado1, resultado2);

El código seria así pasando tanto por referencia como por punteros:

Código
  1. #include <stdio.h>
  2.  
  3. void accionRef ( int& a, int& b, int& c, int& r1, int& r2 ) { /*Parametros por referencia*/
  4. r1 = a + b;
  5. r2 = c - 13;
  6. }
  7.  
  8. void accionPunt ( int* a, int* b, int* c, int* r1, int* r2 ) { /*Parametros por puntero*/
  9. *r1 = *a + *b +20;
  10. *r2 = *c - 13 + 112;
  11. }
  12.  
  13. int main () {
  14. int A = 10;
  15. int B = 30;
  16. int C = 40;
  17. int resultado1 = 0;
  18. int resultado2 = 0;
  19. /*Lamamos a la accion*/
  20. accionRef ( A, B, C, resultado1, resultado2 );
  21.  
  22. /* resultado1 aqui vale 40 y resultado2 vale 27*/
  23. /*si eso es asi he echo 2 calculos con una accion¿comprobemos?*/
  24.  
  25. printf ("resultado1: %d\n resultado2: %d\n ", resultado1, resultado2);
  26.  
  27. /*Ahora volvamos a hacer pero con punteros*/
  28. accionPunt ( &A, &B, &C, &resultado1, &resultado2 );
  29. printf ("resultado1: %d\n resultado2: %d\n ", resultado1, resultado2);
  30.  
  31.  
  32. return 0;
  33. }
  34.  

Espero haberlo aclarado.
Hay muchos mas y mejores ejemplos por Internet.
Busque acción, referencia y punteros....
Suerte!
« Última modificación: 28 Febrero 2014, 08:47 am por vangodp » En línea

patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Re: como regreso mas de un variable de una funcion con un apuntador??
« Respuesta #4 en: 28 Febrero 2014, 11:15 am »

Hola vangodp lo que has dicho es devolver? Guarda los valores en las variables pero el sentido de que la función devuelve algo se pierde aunque si devuelve un resultado. Bueno pero se puede utilizar igual.
También se puede utilizar una clase que guarde los dos resultados y se devuelva así se puede devolver con return;
Pero creo que lo que has dicho es mejor.
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: como regreso mas de un variable de una funcion con un apuntador??
« Respuesta #5 en: 28 Febrero 2014, 11:44 am »

Código
  1. int* func( )
  2. {
  3.  int* to_return = (int*)malloc( 2 * sizeof( int ) );
  4.  
  5.  to_return[ 0 ] = 1;
  6.  to_return[ 1 ] = 2;
  7.  
  8.  free( to_return );
  9. }
  10.  
  11. void main( );
  12. {
  13.  int* valores = func( );
  14.  
  15.  printf( "%d %d\n", valores[ 0 ], valores[ 1 ] );
  16. }

Con estructuras queda más elegante

Código
  1. typedef struct
  2. {
  3.  int* valores;
  4.  int numValores;
  5. } Vector;
  6.  
  7. Vector CrearVector( int numValores )
  8. {
  9.  Vector to_return;
  10.  to_return.numValores = numValores;
  11.  to_return.valores = (int*)calloc( 2 * sizeof( int ) );
  12.  return to_return;
  13. }
  14.  
  15. void EliminarVector( Vector* vector )
  16. {
  17.  free( vector->valores );
  18.  vector->numValores = 0;
  19. }
  20.  
  21. Vector func( )
  22. {
  23.  Vector to_return = CrearVector( 2 );
  24.  
  25.  to_return.valores[ 0 ] = 1;
  26.  to_return.valores[ 1 ] = 2;
  27.  
  28.  return to_return;
  29. }
  30.  
  31. void main( )
  32. {
  33.  Vector vector = func( );
  34.  
  35.  int i;
  36.  for ( i = 0; i < vector.numValores; i++ )
  37.    printf( "%d ", vector.valores[ i ] );
  38.  printf( "\n" );
  39.  
  40.  EliminarVector( &vector );
  41. }
En línea

patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Re: como regreso mas de un variable de una funcion con un apuntador??
« Respuesta #6 en: 28 Febrero 2014, 13:56 pm »

Hola yo me refiria a las clases pero una pregunta. Como funciona este codigo:

Código
  1. int* func( )
  2. {
  3.  int* to_return = (int*)malloc( 2 * sizeof( int ) );
  4.  
  5.  to_return[ 0 ] = 1;
  6.  to_return[ 1 ] = 2;
  7.  
  8.  free( to_return );
  9. }

ya que nunca devuelve. Creo que free no devuelve o si?

Saludos
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: como regreso mas de un variable de una funcion con un apuntador??
« Respuesta #7 en: 28 Febrero 2014, 14:23 pm »

Como funciona este codigo:
Código
  1. int* func( )
  2. {
  3.  int* to_return = (int*)malloc( 2 * sizeof( int ) );
  4.  
  5.  to_return[ 0 ] = 1;
  6.  to_return[ 1 ] = 2;
  7.  
  8.  free( to_return );
  9. }

ya que nunca devuelve. Creo que free no devuelve o si?
Correcto, el tipo de retorno de la función free es void, para solucionarlo solo tienes que sustituir la sentencia "free( to_return );" por "return to_return;".

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
patilanz


Desconectado Desconectado

Mensajes: 481

555-555-0199@example.com


Ver Perfil WWW
Re: como regreso mas de un variable de una funcion con un apuntador??
« Respuesta #8 en: 28 Febrero 2014, 18:05 pm »

Osea que la función estaba mal o free hace otra cosa aparte de liberar la memoria es que no me entero   ;D
En línea

vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: como regreso mas de un variable de una funcion con un apuntador??
« Respuesta #9 en: 28 Febrero 2014, 22:23 pm »

free() es una función....hasta aquí no hay novedad XD

cuando llamas a una función lo que distingue a una llamada de la función misma es:
al llamar la función lleva punto y coma y no lleva el cuerpo.


Lo que te quiere decir rir es que la función free(); es así en realidad:

void free(){
    /*BLABLABAL*/
}
En línea

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

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines