Conversões em e de tipos de ponteiro

Um ponteiro para um tipo de valor que pode ser convertido em um ponteiro para um tipo diferente. No entanto, o resultado pode ser indefinido devido aos requisitos de alinhamento e aos tamanhos de tipos diferentes em armazenamento. Um ponteiro para um objeto pode ser convertido em um ponteiro para um objeto cujo tipo exige menos alinhamento de armazenamento ou igualmente restrito, e reconverter sem modificação.

Um ponteiro para void pode ser convertido em ou de um ponteiro para qualquer tipo, sem restrição ou perda de informações. Se o resultado for reconvertido no tipo original, o ponteiro original será recuperado.

Se um ponteiro for convertido em outro ponteiro com o mesmo tipo, mas tiver qualificadores diferentes ou extras, o novo ponteiro será o mesmo que o antigo, exceto pelas restrições impostas pelo novo qualificador.

Um valor de ponteiro pode ser convertido em um valor integral. O caminho de conversão depende do tamanho do ponteiro e do tamanho do tipo integral, de acordo com as seguintes regras:

  • Se o tamanho do ponteiro for superior ou igual ao tamanho do tipo integral, o ponteiro se comportará como um valor sem sinal na conversão, exceto que não poderá ser convertido em um valor flutuante.

  • Se o ponteiro for menor que o tipo integral, o ponteiro primeiro será convertido em um ponteiro do mesmo tamanho do tipo integral, e depois convertido no tipo integral.

Inversamente, um tipo integral pode ser convertido em um tipo de ponteiro de acordo com as seguintes regras:

  • Se o tipo integral for do mesmo tamanho que o tipo de ponteiro, a conversão faz com que o valor integral seja tratado como um ponteiro (um número inteiro sem sinal).

  • Se o tamanho do tipo integral for diferente do tamanho do tipo de ponteiro, o tipo integral é convertido primeiro no tamanho do ponteiro, usando os caminhos de conversão fornecidos nas tabelas Conversão de tipos integrais com sinal e Conversão de tipos integrais sem sinal. Em seguida, ele será tratado como um valor de ponteiro.

Uma expressão de constante integral com valor 0 ou uma conversão da expressão convertida no tipo void* pode ser convertida por uma conversão de tipo, por atribuição ou por comparação, em um ponteiro de qualquer tipo. Essa operação produz um ponteiro nulo igual a outro ponteiro nulo do mesmo tipo, mas não é igual a nenhum ponteiro para uma função ou um objeto. Inteiros diferentes da constante 0 podem ser convertidos no tipo ponteiro, mas o resultado não é portátil.

Confira também

Conversões de atribuição