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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Consulta sobre retorno en las funciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Consulta sobre retorno en las funciones  (Leído 2,598 veces)
NicoSanhueza

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Consulta sobre retorno en las funciones
« en: 25 Junio 2018, 04:15 am »

Buenas noches a todos, espero que esten bien.
El problema dice lo siguiente:

 "Cree en el main() una variable del tipo struct dat del problema 1. Inicialize aa en 0.0 y pp en NULL.

Cree una funcion que retorne una estructura del tipo struct dat del problema 1 y asigne este retorno a la variable creada en el main().
Los valores de la estructura de retorno debe recibirlos como argumentos de la funcion y deben ser 78.9 para aa y una direccion de una variable que ya exista(Ud. debe crearla) en el main del mismo tipo."

Tengo entendido si se requiere modificar los valores se debe utilizar un puntero, en este caso deberá ser un puntero a estructura.
Mi problema esta en el momento del retorno de la función.
¿Esta mal planteada o hay un error en el main?

Cualquier tip de utilidad será bienvenido.
GRACIAS DE ANTEMANO  ;-)
Código
  1.  


OBS: la estructura del problema 1 ya esta en el codigo que  está a continuacion

Código
  1. typedef struct dat
  2. {
  3.    double aa;
  4.    int* pp;
  5. }dat;
  6.  
  7. int f=34;
  8.  
  9. dat func(dat*);
  10.  
  11. int main()
  12. {
  13. dat var;
  14.  
  15. dat* puntero=malloc(sizeof(dat));
  16.  
  17. var.aa=0.0;
  18. var.pp=NULL;
  19.  
  20. var=func(puntero);
  21.  
  22.  
  23.  
  24. printf("%d",var.aa);
  25. printf("%d",var.pp);
  26.  
  27.  
  28. return 0;
  29. }
  30.  
  31. dat func(dat* x)
  32. {
  33.    x->aa=78.9;
  34.    x->pp=&f;
  35.  
  36.    return x;
  37. }
  38.  


En línea

SrMcLister

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: Consulta sobre retorno en las funciones
« Respuesta #1 en: 25 Junio 2018, 16:42 pm »

Buenas NicoSanhueza.
A ver te comento, tienes un lio bastante interesante en la cabeza.
Lo voy a explicar en C++, puesto que C no tengo conocimientos.

Si creas una variable tipo dat llamada var, y a eso le asignas el retorno de una función con la que trabajas con punteros, estás buscandole 3 pies al gato no se si me entiendes...
La func recibe un puntero a estructura, y devuelve una estructura...
Si recibe un puntero y trabajas con el puntero... como vas a devolver una estructura?!... es decir, si quisieras devolver una estructura deberías crearte una variable auxiliar tipo dat en la que cambiar los datos.

Te lo modifiqué en C++ para que lo veas y que tuviera sentido:

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. typedef struct{
  5.    double aa;
  6.    int* pp;
  7. }dat;
  8.  
  9. int f=34;
  10. dat func(dat*);
  11.  
  12. int main(){
  13.     dat var;
  14.     dat* puntero= new dat;
  15.  
  16.     var.aa=0.0;
  17.     var.pp=NULL;
  18.  
  19.     cout << "Antes de modificar"<< endl;    
  20.     cout << var.aa << ", " << var.pp << endl;
  21.  
  22.     var=func(puntero);
  23.  
  24.     cout << "Después de modificar"<< endl;    
  25.     cout << var.aa << ", " << *var.pp << endl;
  26.     return 0;
  27. }
  28.  
  29. dat func(dat* x){
  30.    dat aux;
  31.    //Asignación de los nuevos valores al puntero pasado por parametros
  32.    x->aa=78.9;
  33.    x->pp=&f;
  34.    //Rellenado de la nueva estructura a devolver con los valores del puntero
  35.    aux.aa=x->aa;
  36.    aux.pp=x->pp;
  37.    return aux;    
  38. }

Como verás, si la función devuelve una estructura, es obligatorio que devuelva una estructura, no un puntero a estructura.

Esta es otra opción que es más parecido a lo que tu querías hacer.

Código
  1. ...
  2. int main(){
  3.     dat var;
  4.     dat* puntero= new dat;
  5.     ...
  6.     var=*func(puntero);
  7.  
  8.     cout << "Después de modificar"<< endl;    
  9.     cout << var.aa << ", " << *var.pp << endl;
  10.     return 0;
  11. }
  12.  
  13. dat* func(dat* x){
  14.    x->aa=78.9;
  15.    x->pp=&f;
  16.    return x;
  17. }

Echale un vistazo y comentas.

Un saludo.


« Última modificación: 25 Junio 2018, 18:35 pm por SrMcLister » En línea

Código
  1. return((u.areHappy() && u.knowIt()) ? u.clapYourHands() : u.goFuckYourself());
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Consulta sobre retorno en las funciones
« Respuesta #2 en: 25 Junio 2018, 21:58 pm »

Creo que no va por ahí la cosa, a mi entender el prototipo de la función es:
Código
  1. dat func(double real, int* puntero);
En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: Consulta sobre retorno en las funciones
« Respuesta #3 en: 26 Junio 2018, 17:49 pm »

Código
  1. dat func(dat* x)
  2. {
  3.    x->aa=78.9;
  4.    x->pp=&f;
  5.  
  6.    return x;
  7. }
  8.  

Primero, la función esta mal planteada. No tiene mucho sentido lo que haces en este código, pero aun siguiendo tu lógica tienes un error, ya que segun el prototipo la función devuelve un tipo de dato struct en cambio tu estas devolviendo un puntero. En todo caso debes desreferenciar el puntero al retornarlo:
Código
  1. return *x;
En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
consulta sobre generador de funciones con eeprom
Electrónica
gallet 0 3,094 Último mensaje 5 Abril 2006, 15:55 pm
por gallet
duda y pregunta sobre ESDLA el retorno del rey
Juegos y Consolas
deopoldo 7 4,396 Último mensaje 21 Diciembre 2008, 15:17 pm
por deopoldo
consulta sobre Funciones de manejo de errores [c++] « 1 2 »
Programación C/C++
xkiz ™ 10 7,301 Último mensaje 11 Octubre 2011, 06:24 am
por Karman
Sobre paso de parámetros y retorno de funciones
ASM
ivancea96 6 4,003 Último mensaje 12 Agosto 2014, 19:34 pm
por Eternal Idol
Ayuda funciones con retorno de valor en C
Programación C/C++
omegadei 2 1,868 Último mensaje 21 Marzo 2018, 20:04 pm
por omegadei
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines