tipos que punteros puntero declaracion comparar cadenas arreglos aritmetica apuntadores c pointers memory-address

punteros - Imprima la dirección que contiene un puntero en C



que es un puntero en c (6)

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 punteros; Quiero imprimir el contenido del puntero. No quiero desreferenciar el puntero para obtener el valor apuntado, solo quiero la dirección que el puntero ha almacenado.

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 cual es importante que sea correcto) es que eventualmente necesito hacer esto para un puntero a puntero. Es decir:

const Emp** emp1 = (const Emp**) item1;


Como parece que ya ha resuelto la visualización de la dirección del puntero básico, aquí le mostramos cómo verificaría la dirección de un puntero doble:

char **a; char *b; char c = ''H''; b = &c; a = &b;

Podrías acceder a la dirección del doble puntero a haciendo:

printf("a points at this memory location: %p", a); printf("which points at this other memory location: %p", *a);


Creo que esto sería lo más correcto.

printf("%p", (void *)emp1); printf("%p", (void *)*emp1);

printf() es una función variadica y debe pasar argumentos de los tipos correctos. El estándar dice que %p tiene void * .


He estado en esta posición, especialmente con hardware nuevo. Te sugiero que escribas tu propia rutina de volcado hexadecimal. Podrá ver los datos y las direcciones en las que están, que se muestran todos juntos. Es una buena práctica y un generador de confianza.


Lo que tienes es correcto. Por supuesto, verá que emp1 y item1 tienen el mismo valor de puntero.


Para imprimir la dirección en el puntero al puntero:

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 utiliza Linux ddd y visualiza la memoria, o simplemente gdb , verá la dirección de la memoria para que pueda compararla con los valores de los punteros.


char c = ''A''; printf("ptr: %p,/t value: %c,/t and also address: %zu",&c, c,&c);

resultado:

ptr: 0xbfb4027f, valor: A, y también la dirección: 3216245375