[C] (void*) ¿Para qué sirve?

Iniciado por GGZ, 18 Noviembre 2015, 15:55 PM

0 Miembros y 1 Visitante están viendo este tema.

GGZ

Hola a todos!, ¿para que sirve usar (void*) ahí?

#include <stdio.h>

void imprimir_dir(int x) {

printf("La direccion de memoria de a es: %p.\n", (void*) &x);
}

int main(void) {
int n;

printf("Introduzca un valor entero: ");
scanf("%d", &n);

printf("La direccion de memoria de a es: %p.\n", (void*) &n);

imprimir_dir(n);
return 0;
}


¿Qué pasa si yo hago esto?

/*
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?
*/

#include <stdio.h>

void imprimir_dir(int x){

printf ("%p\n",&x);

}

int main (void){
int a;
a=20;
printf ("%p\n",&a);

imprimir_dir(a);

return 0;
}



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!
LET'S DO STUFF!!

DarK_FirefoX

Cita de: ivancea96 en 20 Agosto 2015, 15:02 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.

char s[] = "21";
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

GGZ

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?
LET'S DO STUFF!!

geeke

#3
Cita de: nisteeklod en 18 Noviembre 2015, 15:55 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.

Cita de: nisteeklod en 18 Noviembre 2015, 15:55 PM
¿Qué pasa si yo hago esto?

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

DarK_FirefoX

Cita de: nisteeklod 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?

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

Sigue lo que dice @Coper

Salu2s

GGZ

LET'S DO STUFF!!