Compartilhar via


Conversões de e para tipos de ponteiro

Um ponteiro para um tipo de valor pode ser convertido para um ponteiro para um tipo diferente.No entanto, o resultado pode ser indefinido devido a requisitos de alinhamento e os tamanhos dos diferentes tipos de armazenamento.Um ponteiro para um objeto pode ser convertido para um ponteiro para um objeto cujo tipo requer menos ou igualmente o alinhamento do armazenamento estrito e voltar novamente sem alteração.

Um ponteiro para void podem ser convertidos para ou de um ponteiro para qualquer tipo, sem restrição ou perda de informações.Se o resultado for convertido de volta para o tipo original, o ponteiro original é recuperado.

Se um ponteiro for convertido em outro ponteiro com o mesmo tipo, mas tendo diferentes ou adicionais qualificadores, o novo ponteiro é o mesmo que o antigo, exceto para as restrições imposto pelo novo qualificador.

Um valor de ponteiro também pode ser convertido para um valor inteiro.O caminho de conversão depende do tamanho do ponteiro e o tamanho do tipo integral, de acordo com às seguintes regras:

  • Se o tamanho do ponteiro for maior ou igual ao tamanho do tipo integral, o ponteiro se comporta como um valor não assinado na conversão, exceto que ele não pode ser convertido para um valor flutuante.

  • Se o ponteiro for menor que o tipo integral, o ponteiro é primeiro convertido em um ponteiro com o mesmo tamanho que o tipo integral, em seguida, convertido para o tipo de integral.

Por outro lado, o tipo integral pode ser convertido em um tipo de ponteiro de acordo com as seguintes regras:

  • Se o tipo integral é o mesmo tamanho que o tipo de ponteiro, a conversão simplesmente faz com que o valor integral deve ser tratado como um ponteiro (um inteiro não assinado).

  • Se o tamanho do tipo integral é diferente do tamanho do tipo de ponteiro, o tipo integral é primeiramente convertido para o tamanho do ponteiro, os caminhos de conversão dadas nas tabelas a conversão de tipos integrais assinado e a conversão de tipos inteiro sem sinal.Em seguida, ele é tratado como um valor de ponteiro.

Uma expressão de constante integral com valor 0 ou uma expressão como essa convertida para o tipo void * pode ser convertido por uma atribuição de conversão, por de tipo ou por comparação de um ponteiro de qualquer tipo.Isso produz um ponteiro nulo que é igual a outro ponteiro nulo do mesmo tipo, mas esse ponteiro nulo não é igual a qualquer ponteiro para uma função ou a um objeto.Números inteiros que não a constante 0 podem ser convertidos em tipo de ponteiro, mas o resultado não é portátil.

Consulte também

Conceitos

Conversões de atribuição