Ayuda 1pregunta en C/C++

Iniciado por XorNet, 23 Julio 2013, 00:36 AM

0 Miembros y 2 Visitantes están viendo este tema.

XorNet

Bueno tengo 1 duda que para ustedes quizas sea estúpida xD Bueno aqui va, sí tenemos un programa se la siguiente manera:
Código (cpp) [Seleccionar]

#include <stdio.h>

int funcion2()
{
   return 5;
}

int funcion1()
{
  return funcion2();
/* Mi duda esta acá, es decir, a retornar una función este
entra a esa función y retorna lo mismo
que retorna la funcion2? Osea en este caso la funcion 2 retorna 5, entonces la funcion1()
entra a la función2() y esta retorna lo mismo que la funcion2()?
Ya que como esta  retornando la función yo opino que la funcion1() entra a la funcion2() dado que la funcion2()
retorna 5, la funcion1() retornara 5 ya que esta
pidiendo que retorne a la funcion2()*/
}

int main(void)
{
   printf("%d \n",funcion1() );

  getchar();
  return 0;
}




z3nth10n

No me he entrao de ná. xD

A ver... Esto es probarlo y aun no me ha quedado claro tu duda...

PD: Tal como tienes en tu code todo esto, te va a salir 5, y tu pides el porque... Yo no tengo npi. xD

Interesados hablad por Discord.

XorNet

Cita de: Ikillnukes en 23 Julio 2013, 00:58 AM
No me he entrao de ná. xD

A ver... Esto es probarlo y aun no me ha quedado claro tu duda...

PD: Tal como tienes en tu code todo esto, te va a salir 5, y tu pides el porque... Yo no tengo npi. xD

Lo que trato de decir es que, al retornar una función este entra a la función y retorna el resultado esa función? o retorna la función (Perdóname semejante estupidez seguro no es así pero quiero asegurarme xddd)

z3nth10n

No tengo una respuesta certera 100%, pero como puedes observar ese return engloba a toda la función por lo que probablemente, estés retornando la función entera , aunque si te das cuenta siempre que uses return al final de una variable, supongo que podrás hacer int algo = 6; y luego un return algo;... Y ya ahí estés retornando una variable, pero yo que te voy a decir si he empezado hoy con C++ xD

Que te digan los pros del sub-foro de Programación C++ lo que ellos pienses.
PD: No se porque quieres saber tal tontería, pero bueno. :huh:

Interesados hablad por Discord.

Puntoinfinito

A ver, lo primero que se ejecuta es main(), evidentemente. Luego a partir de ahí llama a la impresión de pantalla con el valor que retorna function1(), que esta va a function2() que retorna el número 5, y luego vuelve a main(), en este caso ejecuta getchar() y bye bye.
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

Caster

Lo primero: Hay que aprender a explicarse un poco mejor, sin animo de ofender.

Segundo: No hay mejor manera de aprender a programar que probando cada uno sus codigos, al compilar este codigo:

#include <stdio.h>

int funcion1();
int funcion2();

int main()
{
printf("%d", funcion1());
getchar();
return 0;
}

int funcion2()
{
return 5;
}

int funcion1()
{
return funcion2();
}


el compilador no da ningun aviso ni error y compilar perfectamente, y el resultado es este:

Citar5

Saludos.

calabuig21

Hazte un dibujo a mano, sigue las funciones y verás el resultado. Un ejemplo fácil lo puedes hacer en papel y lapiz  ;D

eferion

cuando tu haces


#include <stdio.h>

int funcion2()
{
    return 5;
}

int funcion1()
{
   return funcion2();
}

int main(void)
{
    printf("%d \n",funcion1() );

   getchar();
   return 0;
}


Lo que estás haciendo, realmente, es lo siguiente:

* Has creado una función "funcion2", que lo único que hace es devolver el resultado que a su vez le proporciona otra funcion "funcion1".

* Dado que funcion1 siempre va a devolver un 5, funcion2 va a devolver ese mismo 5.

* El printf del main va a sacar por pantalla el valor devuelto por funcion2... es decir, un 5.

Cuando tu haces lo siguiente:


int funcion2( )
{
  return funcion1( );
}


No estás devolviendo una función... sino el resultado de esa función.

De hecho, lo que has puesto es equivalente a:


int funcion2( )
{
  int resultado = funcion1( );
  return resultado;
}


Es decir, tu no devuelves funciones. Más bien estás llamando a una función determinada ( funcion1 ) y estás almacenando el resultado que te devuelve.

zonahurbana

Código (cpp) [Seleccionar]

#include <stdio.h>

int funcion2()
{
    return 5;
}

int funcion1()
{
   return funcion2();
}

int main(void)
{
    printf("%d \n",funcion1() );

   getchar();
   return 0;
}


- Al inicio se encuentra la declaración y definición de ambas funciones (ello no implica que se ejecuten antes de main(), sólo si son llamadas por esta función principal).
- Desde main() muestras el valor devuelto por funcion1().
- funcion1() devuelve el valor devuelto por funcion2().
- funcion2() devuelve 5.
- Se muestra 5 por pantalla.

Extra.
Por lo general se recomienda escribir antes de main() los prototipos de las funciones. Algo como:
Código (cpp) [Seleccionar]
int funcion1();
int funcion2();

Y luego, usualmente después de main(), definir el cuerpo de las funciones, para que no haya conflictos en programas donde usas muchas.

Por ejemplo, en tu programa, si el orden hubiese sido el siguiente:
Código (cpp) [Seleccionar]
#include <stdio.h>

int funcion1()
{
   return funcion2();
}

int funcion2()
{
    return 5;
}

int main(void)
{
    printf("%d \n",funcion1() );

   getchar();
   return 0;
}

... hubiese errores, ya que al momento en que se define el cuerpo de funcion1() aún no existe funcion2(). Entonces cuando muchas funciones se llamen entre sí, para no estar pendientes del orden, es mejor escribir sus declaraciones (prototipos  :silbar:).
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

amchacon

#9
Vamos ha hacerlo más interesante. Esto es una función que te calcula las veces que tienes que dividir entre 2 un número para obtener 0:

Código (cpp) [Seleccionar]
#include <stdio.h>

int funcion1(int i)
{
 if (i == 0) return 0;

 return funcion1(i/2) + 1;
}

int main(void)
{
  printf("%d iteraciones \n",funcion1(10) );

 getchar();
 return 0;
}


Como puedes ver, se puede retornar incluso la misma función.

A esta técnica de programación se le llama recursividad, o función recursiva.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar