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)
| | |-+  funciones INT vs VOID
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: funciones INT vs VOID  (Leído 7,235 veces)
ALONSOQ

Desconectado Desconectado

Mensajes: 62



Ver Perfil
funciones INT vs VOID
« en: 3 Septiembre 2012, 13:38 pm »

Buenas,

Una pregunta que me gustaría me aclaraseis,

A la hora de trabajas la función principal con funciones, estas puedes ser void ( no devuelven nada) int (devuelven un parametro), Por ejemplo sumar dos números, se puede hacer de las dos formas; ¿ es recomendable hacerlo de alguna de las dos formas en concreto o se pueden usar indistintamente?

gracias


En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: funciones INT vs VOID
« Respuesta #1 en: 3 Septiembre 2012, 15:18 pm »

Depende de para qué , si entiendes punteros , el valor se pasa por referencia y entonces no hace falta que devuelva nada por lo tanto se utiliza void , pero si no pasas ningún puntero si te hace falta que devuelva algo por ser una función auxiliar pues no puede ser void, depende de para qué lo uses.Te pongo un ejemplo:
Código
  1. #include<stdio.h>
  2. void sumar(int *num1, int num2)//Pasamos num1 por referencia y num2 por valor.
  3. {
  4.    *num1 += num2;//Asignamos al contenido num1 la suma del contenido num1 + num2.
  5. }
  6. void sumar(int *num1,int *num2)//Pasamos num1 y num2 por referencia.
  7. {
  8.    *num1+=*num2;//Asignamos al contenido de num1 la suma del contenido de num1 mas el contenido de num2.
  9. }
  10. int sumar(int num1, int num2)//Pasamos num1 y num2 por valor.
  11. {
  12.    return (num1+num2);//Retornamos su suma.
  13. }
  14. int main(int argc , char * argv[])
  15. {
  16.    int num1 = 2;
  17.    int num2 = 3;
  18.    sumar(&num1,num2);
  19.    printf("Funcion void pasando num1 por referencia y num2 por valor , se suma el contenido de num1 a num2 y se asigna a num1.Resultado: %d\n\n",num1);
  20.    //Reseteamos valores.
  21.    num1=2;
  22.    num2=3;
  23.    sumar(&num1,&num2);
  24.    printf("Funcion void pasando num1 y num2 por referencia   , se suma el contenido de num1 al contenido de num2 y se asigna al contenido de num1.Resultado: %d\n\n",num1);
  25.    //Reseteamos valores.
  26.    num1=2;
  27.    num2=3;
  28.    printf("Funcion int pasando num1 y num2 por valor y retornando su suma.Resultado: %d\n",sumar(num1,num2));
  29.    return 0;
  30. }
  31.  
La salida por consola es:
Código:
Funcion void pasando num1 por referencia y num2 por valor , se suma el contenido
 de num1 a num2 y se asigna a num1.Resultado: 5

Funcion void pasando num1 y num2 por referencia   , se suma el contenido de num1
 al contenido de num2 y se asigna al contenido de num1.Resultado: 5

Funcion int pasando num1 y num2 por valor y retornando su suma.Resultado: 5

Es muchísimo más manejable la int , además usan la misma cantidad de memoria las trés , eso sí no sé si por que la int retorna ,igual es más lenta(a escala muy pequeña) no tengo ni idea.


« Última modificación: 3 Septiembre 2012, 15:22 pm por avesudra » En línea

Regístrate en
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: funciones INT vs VOID
« Respuesta #2 en: 3 Septiembre 2012, 15:30 pm »

Yo diria la que menos memoria utiliza es la que pasa los dos numeros por referencia, ya que no se hace una copia de sus valores para operar.

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: funciones INT vs VOID
« Respuesta #3 en: 3 Septiembre 2012, 15:32 pm »

Yo diria la que menos memoria utiliza es la que pasa los dos numeros por referencia, ya que no se hace una copia de sus valores para operar.

Saludos.
Pero se pasa la referencia , y el puntero a int , vale 4 bytes... No lo sé seguro la verdad.

¡Un saludo!
En línea

Regístrate en
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: funciones INT vs VOID
« Respuesta #4 en: 3 Septiembre 2012, 15:40 pm »

Citar
Yo diria la que menos memoria utiliza es la que pasa los dos numeros por referencia, ya que no se hace una copia de sus valores para operar.

yo estoy contigo... quizas en el caso de int sea lo mismo, pero si la variable es por ejemplo un struct con varios campos, la diferencia si que es notable. por ejemplo:

Código
  1. struct prueba {
  2. int a, b, c;
  3. char d, f, *g;
  4. float h, i, j;
  5. };
  6.  

aqui una variale struct ocupa 40 bytes y en cambio un puntero al struct ocupa 8 bytes.

un saludo!

por cierto, acabo de hacer un sizeof(int*) y a mi me da que son 8 bytes, igual que cualquier otro puntero.
« Última modificación: 3 Septiembre 2012, 15:44 pm por xiruko » En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: funciones INT vs VOID
« Respuesta #5 en: 3 Septiembre 2012, 15:54 pm »

yo estoy contigo... quizas en el caso de int sea lo mismo, pero si la variable es por ejemplo un struct con varios campos, la diferencia si que es notable. por ejemplo:

Código
  1. struct prueba {
  2. int a, b, c;
  3. char d, f, *g;
  4. float h, i, j;
  5. };
  6.  

aqui una variale struct ocupa 40 bytes y en cambio un puntero al struct ocupa 8 bytes.

un saludo!

por cierto, acabo de hacer un sizeof(int*) y a mi me da que son 8 bytes, igual que cualquier otro puntero.
Buena observación , pues claro igual con int no pero con otras cosas si como son las estructuras, ahora si que estoy con ustedes.Pues a mi me da 4 bytes con este código igual es que estoy compilando para 32 bits no sé:
Código
  1. #include<stdio.h>
  2. int main(int argc , char * argv[])
  3. {
  4.    printf("Sizeof int* : %d bytes",sizeof(int*));
  5.    return 0;
  6. }
  7.  
Código:
Sizeof int* : 4 bytes
Process returned 0 (0x0)   execution time : 0.025 s
Press any key to continue.
« Última modificación: 3 Septiembre 2012, 15:59 pm por avesudra » En línea

Regístrate en
Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: funciones INT vs VOID
« Respuesta #6 en: 3 Septiembre 2012, 16:13 pm »

La mas correcta suele ser la de usar parametros, es mas simple de usar, no podemos atenernos a conceptos de uso de memoria por parte de un programa ( que los ordenadores de hoy en dia  no tienen 256k de memoria... )
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: funciones INT vs VOID
« Respuesta #7 en: 3 Septiembre 2012, 16:31 pm »

La mas correcta suele ser la de usar parametros, es mas simple de usar, no podemos atenernos a conceptos de uso de memoria por parte de un programa ( que los ordenadores de hoy en dia  no tienen 256k de memoria... )
Pero aún así si lo entiendes , puedes hacer un mejor programa digo yo.No te digo que para esto que es un simple número pero para un programa mayor que pongamos que use 600 MB de un array de estructuras... pues estaría bien usar punteros creo yo  :xD
En línea

Regístrate en
Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: funciones INT vs VOID
« Respuesta #8 en: 3 Septiembre 2012, 16:44 pm »

Cuando el programa maneja un gran numero de datos en memoria, lo que se suelen hacer es modelos matemáticos para evitar sobrecargar la memoria y desarrollar un algoritmo en consecuencia. Recuerda que los puntero además, son memoria dinámica, y van al heap, y este también tiene un espacio limitado... ( mucho mas limitado que el conjunto de la RAM )
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: funciones INT vs VOID
« Respuesta #9 en: 3 Septiembre 2012, 17:04 pm »

Cuando el programa maneja un gran numero de datos en memoria, lo que se suelen hacer es modelos matemáticos para evitar sobrecargar la memoria y desarrollar un algoritmo en consecuencia. Recuerda que los puntero además, son memoria dinámica, y van al heap, y este también tiene un espacio limitado... ( mucho mas limitado que el conjunto de la RAM )
Mmmm entiendo , pero no llego a ese nivel , ¿sabes de algún escrito o libro que hable sobre eso? , cualquiera de algoritmos y estructuras de datos supongo ¿no? , no sé lo que es el heap, presupongo que será un espacio limitado para la acumulación de punteros , ya lo buscaré , gracias por la información Oblivi0n.

¡Un saludo!
En línea

Regístrate en
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
(void *) en funciones
Programación C/C++
Shon 4 5,317 Último mensaje 25 Enero 2011, 16:06 pm
por Littlehorse
Recursividad con funciones void, ayuda
Java
LiLou 1 3,978 Último mensaje 3 Abril 2011, 10:51 am
por LiLou
Dudas sobre las funciones void en C « 1 2 »
Programación C/C++
niñoAtómico 11 5,611 Último mensaje 11 Octubre 2013, 22:41 pm
por vangodp
COMO DIVIDIR MI CODIGO EN FUNCIONES(VOID)
Programación C/C++
silfer_1908 1 1,865 Último mensaje 25 Octubre 2018, 00:28 am
por huchoko
Funciones void en python
Scripting
SERGIO_@PRENDE 1 3,080 Último mensaje 27 Septiembre 2021, 07:25 am
por Danielㅤ
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines