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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Devolver varias variables en una sola función
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Devolver varias variables en una sola función  (Leído 20,394 veces)
javirk

Desconectado Desconectado

Mensajes: 102


Ver Perfil
Devolver varias variables en una sola función
« en: 28 Enero 2012, 17:02 pm »

Hola, estoy haciendo un pequeño programa en C++ y me gustaría saber cómo devolver más de una variable en una función. la función lo que hace es recoger tres números que mete el usuario, y me gustaría usar esos tres números en el main. ¿Cómo puedo hacerlo?


En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #1 en: 28 Enero 2012, 18:11 pm »

mmm devolver los valores como parametro seria una opcion, *nunca devolver punteros generados dentro de la funcion*
o o bien pasarle a la funcion un puntero de array en donde se desee que se guarden los valores, aver esperemos a alguien
mas a ver que opina


En línea

satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Devolver varias variables en una sola función
« Respuesta #2 en: 28 Enero 2012, 18:18 pm »

Hola

Pues una forma sería utilizando parámetros por referencia. Te pongo un ejemplo:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void funcion(int &a, int &b, int &c) // Fijate en los &
  6. {
  7.    cin >> a;
  8.    cin >> b;
  9.    cin >> c;
  10. }
  11.  
  12. int main()
  13. {
  14.    int a = 0, b = 0, c = 0;
  15.    funcion(a, b, c);
  16.    cout << "Los valores de a, b, y c son: " << a << ", " << b << " y " << c;
  17.    cin.get(); //Pausamos el programa
  18.    return 0;
  19. }
  20.  

Te recomiendo que cojas un buen libro y te pongas con él, dentro del subforo de C/C++ hay un post con varios libros.

Saludos
En línea

Breakbeat como forma de vida
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #3 en: 28 Enero 2012, 18:30 pm »

dejo el mio:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void func1(int* Mylp)
  6. {
  7.    *Mylp = 10; Mylp++;
  8.    *Mylp = 20; Mylp++;
  9.    *Mylp = 50; Mylp++;
  10.    // ...
  11.  
  12. }
  13.  
  14.  
  15. int main()
  16. {
  17.    int DATAs[10] = {0}; // Pointer to data, for store the dates
  18.  
  19.    func1(DATAs);
  20.    cout << DATAs[0] << endl;
  21.    cout << DATAs[1] << endl;
  22.    cout << DATAs[2] << endl;
  23.  
  24. }
  25.  


tambie puede indicarle al compilador que lo que quiere es pasar explicitamente un array de esta forma:

Código:
#include <iostream>

using namespace std;

void func1(int Mylp[])
{
    Mylp[0] = 10;
    Mylp[1] = 20;
    Mylp[2] = 50;
    // ...

}


int main()
{
    int DATAs[5] = {0}; // Pointer to data, for store the dates


    func1(DATAs);
    cout << DATAs[0] << endl;
    cout << DATAs[1] << endl;
    cout << DATAs[2] << endl;

}

solamente que el puntero que se le pasa es constante no podemos hacer que apunte a otro lugar y creo que seria mas facil de entender :P igual me gusta mas la primera forma
« Última modificación: 28 Enero 2012, 19:17 pm por RHL » En línea

satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Devolver varias variables en una sola función
« Respuesta #4 en: 28 Enero 2012, 18:39 pm »

Hola

RHL tu solución es muy buena pero dada su pregunta no creo que haya llegado aun a los punteros y no se si entenderá tu código.

No te lo tomes a mal, solo digo que quizá no lo entienda, eso es todo.

Saludos
En línea

Breakbeat como forma de vida
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #5 en: 28 Enero 2012, 18:45 pm »

@satu: bueno quiza , quien sabe xd
lo importante es que al menos ya tienen dos formas de como hacerlo y aprender esos codigos le sera muy facil
mas cuando ya este en el tema de los punteros ;D
En línea

satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Devolver varias variables en una sola función
« Respuesta #6 en: 28 Enero 2012, 18:48 pm »

Toda la razón, así si no sabe sobre punteros le entrarán ganas de saber cómo funcionan.

Saludos
En línea

Breakbeat como forma de vida
Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #7 en: 28 Enero 2012, 19:14 pm »

También puedes hacer que tu función devuelva una tupla.

Código
  1. struct Result {
  2. int result1;
  3. char result2;
  4. double result3;
  5. };
  6.  
  7. Result foo(int param) {
  8. Result r;
  9. // GENERIC CODE
  10. return r;
  11. }

Saludos
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #8 en: 28 Enero 2012, 19:19 pm »

@Xandrete... :
Al declarar variables dentro de funciones no* se pueden retornar porque las variables son
locales la memoria asignada en ese momento es liberada, despues puede tener otros valores
pd: debe ser un tipo de dato como char, int :P

pd2: creo que si, es legal devolver estructuras :P solamente que es algo lento.. :P
al menos el dato ya lo tienes...

cierto solamente que en tiempo de ejecucion es mas lento que pasar el puntero, a los datos :P
« Última modificación: 28 Enero 2012, 19:43 pm por RHL » En línea

Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: Devolver varias variables en una sola función
« Respuesta #9 en: 28 Enero 2012, 19:38 pm »

@Xandrete... :
Al declarar variables dentro de funciones no* se pueden retornar porque las variables son
locales la memoria asignada en ese momento es liberada, despues puede tener otros valores
pd: debe ser un tipo de dato como char, int :P

¿Eh? Lo que dices no se aplica al código que yo he propuesto. Esto es algo que he hecho millones de veces, de hecho.

Retornas una copia de esa variable, no un puntero a la variable declarada dentro de la función. Pruébalo y verás que funciona perfectamente (y si compilas con -Wall y -Werror, el compilador no se quejará ni un poquito).

Saludos.

EDITO: Acabo de leer tu PD2. Es totalmente legal, te lo aseguro. ¿Lento? Bueno, en un caso es lento el paso de parámetros, y en otro es lento el retorno de la función. Me explico. Pon que quieres devolver/asignar 100 datos en una función, y que tratas de hacerlo mediante la primera alternativa (la de paso de parámetros por referencia). En ese caso es "lento" el paso de parámetros porque se han de guardar 100 punteros en pila (más parámetros adicionales que hicieran falta en la función). Sin embargo, el retorno es rápido porque no hay nada que devolver. En mi propuesta (usando struct) es rápido el paso de parámetros (porque seguramente no hay que usar ni la pila) pero lento el retorno de la función (porque es ahí cuando hay que recurrir a ella).

EDITO OTRA VEZ: Si tienes algo que replicarme, dale a responder otra vez, no sigas editanto el tuyo, xD (yo lo hago para no poner dos posts seguidos  ;D)
« Última modificación: 28 Enero 2012, 19:58 pm por Xandrete » En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como declaro varias variables en una sola linea C?¿
Programación C/C++
lupitapro 7 14,918 Último mensaje 14 Junio 2010, 23:09 pm
por .:WindHack:.
Devolver un vector en una funcion
Programación C/C++
d00ze13 5 25,189 Último mensaje 12 Enero 2011, 09:41 am
por leogtz
Problema absurdo con variables en funcion
Java
JonhLimon 2 2,099 Último mensaje 17 Enero 2013, 12:47 pm
por JonhLimon
Función con return de varias variables
Programación C/C++
Palante 1 2,079 Último mensaje 11 Febrero 2017, 02:29 am
por engel lex
No devolver nunca punteros a variables locales a una función en c
Programación C/C++
eduu15 7 4,641 Último mensaje 11 Abril 2018, 16:08 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines