Imprimir o endereço que um ponteiro contém em C

Quero fazer algo que pareça bastante simples. Tenho resultados, mas o problema é que Não tenho como saber se os resultados estão correctos.

Estou a trabalhar em C e tenho dois ponteiros, quero imprimir o conteúdo do ponteiro. Eu não quero dereferência o ponteiro para ter o valor apontado, eu só quero o endereço que o ponteiro tem armazenado.

escrevi o seguinte código e o que preciso de saber é se está certo e se não, como posso corrigir ele.

/* 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 );

Enquanto eu estou postando isso (e a razão pela qual é importante que esteja correto) é que eu eventualmente preciso fazer isso para um ponteiro-a-ponteiro. Isto é:

const Emp** emp1 = (const Emp**) item1; 
Author: Matt, 2009-06-29

6 answers

O que tem está correcto. Claro, você verá que emp1 e item1 têm o mesmo valor de ponteiro.
 25
Author: Don Neufeld, 2009-06-28 22:53:17

Imprimir o endereço em ponteiro para ponteiro:

printf("%p",emp1)

Para dereference uma vez e imprimir o segundo endereço:

printf("%p",*emp1)

Poderá sempre verificar com o depurador, se estiver no linux use {[[2]} e mostrar a memória, ou simplesmente gdb, irá ver o endereço da memória para poder comparar com os valores nos seus ponteiros.

 36
Author: stefanB, 2009-06-28 22:53:28
Acho que isto seria o mais correcto.
printf("%p", (void *)emp1);
printf("%p", (void *)*emp1);

printf() é uma função variádica e deve ser passada argumentos dos tipos certos. O padrão diz: toma.

 14
Author: sigjuice, 2013-03-15 01:40:30

Uma vez que já parece ter resolvido a visualização do endereço básico do ponteiro, eis como iria verificar o endereço de um ponteiro duplo:

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

b = &c;
a = &b;

Você seria capaz de acessar o endereço do ponteiro duplo {[2] } Fazendo:

printf("a points at this memory location: %p", a);
printf("which points at this other memory location: %p", *a);
 9
Author: Luca Matteis, 2009-06-28 23:17:24
char c = 'A';
printf("ptr: %p,\t value: %c,\t and also address: %zu",&c, c,&c);

Resultado:

Ptr: 0xbfb4027f, valor: A, e também endereço: 3216245375

 4
Author: 4pie0, 2016-07-09 10:34:03
Tenho estado nesta posição, especialmente com equipamento novo. Sugiro que escrevas a tua própria rotina de largar hex. Você será capaz de ver os dados, e os endereços em que eles estão, mostrados todos juntos. É uma boa prática e um factor de confiança.
 0
Author: gbarry, 2009-06-29 03:18:07