Autor
|
Tema: funciones INT vs VOID (Leído 7,270 veces)
|
ALONSOQ
Desconectado
Mensajes: 62
|
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
Mensajes: 724
Intentando ser mejor cada día :)
|
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: #include<stdio.h> void sumar(int *num1, int num2)//Pasamos num1 por referencia y num2 por valor. { *num1 += num2;//Asignamos al contenido num1 la suma del contenido num1 + num2. } void sumar(int *num1,int *num2)//Pasamos num1 y num2 por referencia. { *num1+=*num2;//Asignamos al contenido de num1 la suma del contenido de num1 mas el contenido de num2. } int sumar(int num1, int num2)//Pasamos num1 y num2 por valor. { return (num1+num2);//Retornamos su suma. } int main(int argc , char * argv[]) { int num1 = 2; int num2 = 3; sumar(&num1,num2); 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 ); //Reseteamos valores. num1=2; num2=3; sumar(&num1,&num2); 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 ); //Reseteamos valores. num1=2; num2=3; printf("Funcion int pasando num1 y num2 por valor y retornando su suma.Resultado: %d\n",sumar (num1 ,num2 )); return 0; }
La salida por consola es: 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
Mensajes: 1.077
|
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
Mensajes: 724
Intentando ser mejor cada día :)
|
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
Mensajes: 438
|
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: struct prueba { int a, b, c; char d, f, *g; float h, i, j; };
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
Mensajes: 724
Intentando ser mejor cada día :)
|
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: struct prueba { int a, b, c; char d, f, *g; float h, i, j; };
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é: #include<stdio.h> int main(int argc , char * argv[]) { printf("Sizeof int* : %d bytes",sizeof(int*)); return 0; }
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
Mensajes: 392
Odio las ranas.
|
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
Mensajes: 724
Intentando ser mejor cada día :)
|
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
|
|
|
En línea
|
Regístrate en
|
|
|
Oblivi0n
Desconectado
Mensajes: 392
Odio las ranas.
|
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
Mensajes: 724
Intentando ser mejor cada día :)
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
(void *) en funciones
Programación C/C++
|
Shon
|
4
|
5,334
|
25 Enero 2011, 16:06 pm
por Littlehorse
|
|
|
Recursividad con funciones void, ayuda
Java
|
LiLou
|
1
|
3,984
|
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,630
|
11 Octubre 2013, 22:41 pm
por vangodp
|
|
|
COMO DIVIDIR MI CODIGO EN FUNCIONES(VOID)
Programación C/C++
|
silfer_1908
|
1
|
1,878
|
25 Octubre 2018, 00:28 am
por huchoko
|
|
|
Funciones void en python
Scripting
|
SERGIO_@PRENDE
|
1
|
3,111
|
27 Septiembre 2021, 07:25 am
por Danielㅤ
|
|