Problema representación dirección de memoria en C.

Iniciado por lanun, 28 Febrero 2014, 18:45 PM

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

lanun

Hola, estoy teniendo un problema al intentar representar una variable hexadecimal en C, concretamente la ubicación de un puntero, pues no puedo utilizar %x, sólo %p (este último no muestra en hexadecimal).
Concretamente, las líneas son éstas:

  int v1;
  v1=4;
  printf("dir_v1=%x v1=%d\n",&v1,v1);

Éste es el error que me lanza:

warning: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'int *'

Gracias, probablemente sea alguna tontería, pero es que acabo de empezar a aprender C.

x64core

Cita de: lanun en 28 Febrero 2014, 18:45 PM
Hola, estoy teniendo un problema al intentar representar una variable hexadecimal en C, concretamente la ubicación de un puntero, pues no puedo utilizar %x, sólo %p (este último no muestra en hexadecimal).
Concretamente, las líneas son éstas:

  int v1;
  v1=4;
  printf("dir_v1=%x v1=%d\n",&v1,v1);

Éste es el error que me lanza:

warning: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'int *'

Gracias, probablemente sea alguna tontería, pero es que acabo de empezar a aprender C.

Es simplemente un Warning, lo que haces es pasarle la direccion de una variable en el segundo parametro pero en el formato se espera de tipo
un entero sin signo, el código funcionará sin problemas es simplemente un aviso del compilador si por alguna razon no son esas las intenciones
del programador. se resuelve usando %p o un casting aunque lo mejor seria %p.

lanun

Gracias por responder tan rápido, ¿hay alguna forma de evitar ese warning utilizando %x?, básicamente lo digo porque esta duda me ha surgido repasando una asignatura de la universidad, donde hemos utilizado %x en clase sin que diera este error.

Gracias.

x64core

Cita de: lanun en 28 Febrero 2014, 19:24 PM
Gracias por responder tan rápido, ¿hay alguna forma de evitar ese warning utilizando %x?, básicamente lo digo porque esta duda me ha surgido repasando una asignatura de la universidad, donde hemos utilizado %x en clase sin que diera este error.

Gracias.
usando un casting.

lanun

Perdona, pero es que estoy aprendiendo C en estos momentos y no sé a lo que te refieres.

Puede se ésto:
int v4;
  v1=4;
  printf("dir_v1=%p     v1=%d\n",(int*)&v1,v1);

??

x64core

Cita de: lanun en 28 Febrero 2014, 19:27 PM
Perdona, pero es que estoy aprendiendo C en estos momentos y no sé a lo que te refieres.


int v1;
  v1=4;
  printf("dir_v1=%x v1=%d\n",(unsigned int)&v1,v1);