Punteros en C

Iniciado por ;c1v!c, 19 Septiembre 2011, 15:06 PM

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

;c1v!c

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!

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

;c1v!c

ahh gracias, no entendi esta parte "y convertir explícitamente el puntero al tipo "void *"
que pasa si no le pongo (void *)

saludos!

LearningSpanishProgrammer

#3
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?
Estoy aprendiendo español, y tu estas aprendiendo programación

;c1v!c

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;
}