Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: GGZ en 18 Noviembre 2015, 15:55 pm



Título: [C] (void*) ¿Para qué sirve?
Publicado por: GGZ en 18 Noviembre 2015, 15:55 pm
Hola a todos!, ¿para que sirve usar (void*) ahí?

Código
  1. #include <stdio.h>
  2.  
  3. void imprimir_dir(int x) {
  4.  
  5. printf("La direccion de memoria de a es: %p.\n", (void*) &x);
  6. }
  7.  
  8. int main(void) {
  9. int n;
  10.  
  11. printf("Introduzca un valor entero: ");
  12. scanf("%d", &n);
  13.  
  14. printf("La direccion de memoria de a es: %p.\n", (void*) &n);
  15.  
  16. imprimir_dir(n);
  17. return 0;
  18. }
  19.  

¿Qué pasa si yo hago esto?

Código
  1. /*
  2. Definir una simple función imprimir_dir(int x) cuyo único propósito sea imprimir la dirección del entero
  3. x que se le pasa. Crear una variable entera en main, imprimir su dirección ahí mismo y
  4. luego pasar la variable a imprimir_dir. Comparar los resultados. ¿Es el comportamiento esperado?
  5. */
  6.  
  7. #include <stdio.h>
  8.  
  9. void imprimir_dir(int x){
  10.  
  11. printf ("%p\n",&x);
  12.  
  13. }
  14.  
  15. int main (void){
  16. int a;
  17. a=20;
  18. printf ("%p\n",&a);
  19.  
  20. imprimir_dir(a);
  21.  
  22. return 0;
  23. }


Lo que se me pide es: Definir una simple función imprimir_dir(int x) cuyo único propósito sea imprimir la dirección del entero x que se le pasa. Crear una variable entera en main, imprimir su dirección ahí mismo y luego pasar la variable a imprimir_dir. Comparar los resultados. ¿Es el comportamiento esperado?

Saludos!


Título: Re: [C] (void*) ¿Para que sirve?
Publicado por: DarK_FirefoX en 18 Noviembre 2015, 16:00 pm
Una función que retorna, devuelve un valor u objeto.

Por ejemplo, la función "atoi(char*)", coge una cadena, y la transforma en un int.

Código
  1. char s[] = "21";
  2. int n = atoi(s);

"atoi" retorna el entero 21.

Las funciones void, simplemente no retornan. Hacen un trabajo, el que sea, y no devuelve nada.

En tu caso, tu función no es necesario que devuelva nada, pues solo va a imprimir una texto en consola. Piensa: ¿De que te sirve devolver un valor si no lo vas a capturar cuando llames a la función?

Salu2s


Título: Re: [C] (void*) ¿Para qué sirve?
Publicado por: GGZ en 18 Noviembre 2015, 16:01 pm
Si eso si lo sé, a eso no me refiero, me refiero al (void*) que está adentro printf, no como está definida la función.

¿O entendí mal?


Título: Re: [C] (void*) ¿Para qué sirve?
Publicado por: geeke en 18 Noviembre 2015, 19:22 pm
¿para que sirve usar (void*) ahí?

El especificador de formato %p espera un argumento de tipo void*, por lo tanto es necesario el cast.

¿Qué pasa si yo hago esto?

Al omitir el cast tu aplicacion queda expuesta a comportamiento indefinido.


Título: Re: [C] (void*) ¿Para qué sirve?
Publicado por: DarK_FirefoX en 18 Noviembre 2015, 19:28 pm
Si eso si lo sé, a eso no me refiero, me refiero al (void*) que está adentro printf, no como está definida la función.

¿O entendí mal?

Perdón! No había visto esto ^^

Sigue lo que dice @Coper

Salu2s


Título: Re: [C] (void*) ¿Para qué sirve?
Publicado por: GGZ en 18 Noviembre 2015, 22:14 pm
Entendido, muchas gracias.