Conversão entre Ponteiros e Inteiros
Em computadores modernos, um endereço de memória é simplesmente um número. Ele ocupa o mesmo espaço que um inteiro de determinado tamanho. Em C, você pode converter um ponteiro para tipos inteiros apropriados e vice-versa, sem perder informação.
Os tipos inteiros apropriados para isso são:
uintptr_t
— tipo sem sinal;intptr_t
— tipo com sinal.
Ambos são definidos no cabeçalho <stdint.h>
.
Exemplo:
#include <stdint.h>
#include <stdio.h>
void
print_pointer(void *ptr)
{
uintptr_t converted = (uintptr_t) ptr;
printf("Pointer value is 0x%x\n", (unsigned int) converted);
}
A especificação %x
no template da printf
indica que o valor será impresso em notação hexadecimal.
É mais limpo usar uintptr_t
, já que a impressão hexadecimal trata o número como sem sinal, mas na prática isso não faz diferença: o que a printf
recebe é apenas a sequência de bits do número.
Converter ponteiros para inteiros é arriscado — não faça isso, a menos que seja realmente necessário.
Atualizado
Isto foi útil?