Autor
|
Tema: Devolver varias variables en una sola función (Leído 20,394 veces)
|
javirk
Desconectado
Mensajes: 102
|
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
Mensajes: 1.908
|
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
Mensajes: 301
Siempre aprendiendo
|
Hola Pues una forma sería utilizando parámetros por referencia. Te pongo un ejemplo: #include <iostream> using namespace std; void funcion(int &a, int &b, int &c) // Fijate en los & { cin >> a; cin >> b; cin >> c; } int main() { int a = 0, b = 0, c = 0; funcion(a, b, c); cout << "Los valores de a, b, y c son: " << a << ", " << b << " y " << c; cin.get(); //Pausamos el programa return 0; }
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
Mensajes: 1.908
|
dejo el mio: #include <iostream> using namespace std; void func1(int* Mylp) { *Mylp = 10; Mylp++; *Mylp = 20; Mylp++; *Mylp = 50; Mylp++; // ... } int main() { int DATAs[10] = {0}; // Pointer to data, for store the dates func1(DATAs); cout << DATAs[0] << endl; cout << DATAs[1] << endl; cout << DATAs[2] << endl; }
tambie puede indicarle al compilador que lo que quiere es pasar explicitamente un array de esta forma: #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 igual me gusta mas la primera forma
|
|
« Última modificación: 28 Enero 2012, 19:17 pm por RHL »
|
En línea
|
|
|
|
satu
Desconectado
Mensajes: 301
Siempre aprendiendo
|
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
Mensajes: 1.908
|
@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
|
|
|
En línea
|
|
|
|
satu
Desconectado
Mensajes: 301
Siempre aprendiendo
|
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
Mensajes: 210
|
También puedes hacer que tu función devuelva una tupla. struct Result { int result1; char result2; double result3; }; Result foo(int param) { Result r; // GENERIC CODE return r; }
Saludos
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
@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 pd2: creo que si, es legal devolver estructuras solamente que es algo lento.. al menos el dato ya lo tienes... cierto solamente que en tiempo de ejecucion es mas lento que pasar el puntero, a los datos
|
|
« Última modificación: 28 Enero 2012, 19:43 pm por RHL »
|
En línea
|
|
|
|
Xandrete
Desconectado
Mensajes: 210
|
@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 ¿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 )
|
|
« Última modificación: 28 Enero 2012, 19:58 pm por Xandrete »
|
En línea
|
|
|
|
|
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
|
14 Junio 2010, 23:09 pm
por .:WindHack:.
|
|
|
Devolver un vector en una funcion
Programación C/C++
|
d00ze13
|
5
|
25,189
|
12 Enero 2011, 09:41 am
por leogtz
|
|
|
Problema absurdo con variables en funcion
Java
|
JonhLimon
|
2
|
2,099
|
17 Enero 2013, 12:47 pm
por JonhLimon
|
|
|
Función con return de varias variables
Programación C/C++
|
Palante
|
1
|
2,079
|
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
|
11 Abril 2018, 16:08 pm
por MAFUS
|
|