Quiero hacer algo que parezca bastante simple. Obtengo resultados, pero el problema es que no tengo forma de saber si los resultados son correctos.
Estoy trabajando en C y tengo dos consejos; Quiero imprimir el contenido del puntero. No quiero eliminar la referencia del puntero para obtener el valor al que apunta, solo quiero la dirección que ha almacenado el puntero.
Escribí el siguiente código y lo que necesito saber es si es correcto y si no, cómo puedo corregirlo.
/* item one is a parameter and it comes in as: const void* item1 */
const Emp* emp1 = (const Emp*) item1;
printf("\n comp1-> emp1 = %p; item1 = %p \n", emp1, item1 );
Mientras publico esto (y la razón por la que es importante que sea correcto) es que eventualmente necesito hacer esto para un puntero a un puntero. Es decir:
const Emp** emp1 = (const Emp**) item1;
c
pointers
memory-address
Frank V
fuente
fuente
Respuestas:
Lo que tienes es correcto. Por supuesto, verá que emp1 y item1 tienen el mismo valor de puntero.
fuente
Para imprimir la dirección de un puntero a otro:
printf("%p",emp1)
para eliminar la referencia una vez e imprimir la segunda dirección:
printf("%p",*emp1)
Siempre puede verificar con el depurador, si está usando linux, usa
ddd
y muestra la memoria, o simplementegdb
, verá la dirección de la memoria para que pueda comparar con los valores en sus punteros.fuente
Creo que esto sería lo más correcto.
printf("%p", (void *)emp1); printf("%p", (void *)*emp1);
printf()
es una función variada y se deben pasar argumentos de los tipos correctos. El estándar dice%p
tomavoid *
.fuente
void *
hecho, se requiere un yeso .Como ya parece haber resuelto la visualización básica de la dirección del puntero, así es como comprobaría la dirección de un puntero doble:
char **a; char *b; char c = 'H'; b = &c; a = &b;
Podrá acceder a la dirección del puntero doble
a
haciendo:printf("a points at this memory location: %p", a); printf("which points at this other memory location: %p", *a);
fuente
printf("which contains this value: %c\n" **a);
solo quería agregar eso ^. ^.char c = 'A'; printf("ptr: %p,\t value: %c,\t and also address: %zu",&c, c,&c);
resultado:
fuente
He estado en esta posición, especialmente con hardware nuevo. Te sugiero que escribas tu propia rutina de descarga hexadecimal. Podrá ver los datos y las direcciones en las que se encuentran, todos juntos. Es una buena práctica y genera confianza.
fuente