Foro de elhacker.net

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?

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.    int mientero;
  6.    mientero=5;
  7.  
  8.    printf("%d",&mientero);
  9.    return 0;
  10. }

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 *":
Código
  1. 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:

Código:
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:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.    int mientero,n1,n2=10;
  6.    mientero=5;
  7.    n1=10;
  8.    printf("\t%p\n\t%p\n\t%p\n",&mientero,&n1,&n2);
  9.    return 0;
  10. }