Imprimir o endereço que um ponteiro contém em C
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;
6 answers
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.
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.
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);
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