Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: ;c1v!c en 19 Septiembre 2011, 15:06 PM

Título: Punteros en C
Publicado por: ;c1v!c en 19 Septiembre 2011, 15:06 PM
Estoy compilando esto por consola y me tira el siguiente error alguien sabe por que?

#include <stdio.h>
#include <stdlib.h>
int main()
{
   int mientero;
   mientero=5;
   
   printf("%d",&mientero);
   return 0;
}


Consola:
pepe@pepe-netbook:~$ gcc punt1.c -o punt1
punt1.c: In function 'main':
punt1.c:8: warning: format '%d' expects type 'int', but argument 2 has type 'i
nt *'

EI: juntando mensajes.

compilo en el dev-c++ en windows y anda perfecto!
Título: Re: Punteros en C
Publicado por: rir3760 en 19 Septiembre 2011, 15:17 PM
Me parece el mensaje de error es bastante claro: el especificador "%d" espera un (correspondiente) argumento de tipo "int" mientras que tu le pasas "&mientero" que es de tipo "int *".

Si quieres imprimir una dirección de memoria debes utilizar "%p" y convertir explícitamente el puntero al tipo "void *":
printf("%p\n", (void *) &mientero);

Un saludo
Título: Re: Punteros en C
Publicado por: ;c1v!c en 19 Septiembre 2011, 15:30 PM
ahh gracias, no entendi esta parte "y convertir explícitamente el puntero al tipo "void *"
que pasa si no le pongo (void *)

saludos!
Título: Re: Punteros en C
Publicado por: LearningSpanishProgrammer en 20 Septiembre 2011, 04:33 AM
c1v!c, tu no estas hacendo la pregunta correcta, en mi opinión, sería:


Por qué es importante la diferencia entre %d y %p?


Ahora, piensa lo que pasa caso el equipo es de 64 bits?
Título: Re: Punteros en C
Publicado por: ;c1v!c en 20 Septiembre 2011, 05:10 AM
gracias por las respuestas ya solucione todo gracias!!
aca les dejo el ejercicio facil que teni q hacer pero sirve como ejemplo:
muestra las direcciones de memoria de las variables:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int mientero,n1,n2=10;
    mientero=5;
    n1=10;
    printf("\t%p\n\t%p\n\t%p\n",&mientero,&n1,&n2);
    return 0;
}