Condividi tramite


Conversioni da e verso tipi di puntatore

Un puntatore a un tipo di valore può essere convertito in un puntatore a un tipo diverso. Tuttavia, il risultato può essere non definito a causa dei requisiti di allineamento e delle dimensioni dei diversi tipi in archivio. Un puntatore a un oggetto può essere convertito in un puntatore a un oggetto il cui tipo richiede un allineamento di archiviazione ugualmente o meno rigido e nuovamente senza modifiche.

Un puntatore a void può essere convertito in o da un puntatore con un tipo qualsiasi, senza restrizioni o perdita di informazioni. Se il risultato viene riconvertito nel tipo originale, il puntatore originale viene recuperato.

Se un puntatore viene convertito in un altro puntatore con lo stesso tipo ma con qualificatori diversi o aggiuntivi, il nuovo puntatore è uguale a quello precedente, ad eccezione delle restrizioni imposte dal nuovo qualificatore.

Un valore del puntatore può inoltre essere convertito in un valore integrale. Il percorso di conversione dipende dalla dimensione del puntatore e dalla dimensione del tipo integrale, in base alle regole seguenti:

  • Se la dimensione del puntatore è maggiore o uguale alla dimensione del tipo integrale, il puntatore si comporta come un valore senza segno nella conversione, ad eccezione del fatto che non può essere convertito in un valore mobile.

  • Se il puntatore è minore del tipo integrale, il puntatore viene prima convertito in un puntatore con la stessa dimensione del tipo integrale, quindi viene convertito nel tipo integrale.

Al contrario, un tipo integrale può essere convertito in un tipo di puntatore in base alle regole seguenti:

  • Se il tipo integrale ha la stessa dimensione del tipo di puntatore, la conversione consente semplicemente al valore integrale di essere considerato come puntatore (Unsigned Integer).

  • Se la dimensione del tipo integrale è diversa dalla dimensione del tipo di puntatore, il tipo integrale viene prima convertito nella dimensione del puntatore usando i percorsi di conversione specificati nelle tabelle Conversione dai tipi integrali con segno e Conversione dai tipi integrali senza segno. Viene quindi trattato come valore del puntatore.

Un'espressione costante integrale con valore 0 o un cast di espressione di questo tipo void* può essere convertita da un cast di tipo, da un'assegnazione o da un puntatore di qualsiasi tipo. Questa operazione produce un puntatore Null uguale a un altro puntatore Null dello stesso tipo, ma non è uguale a un puntatore a una funzione o a un oggetto . I numeri interi diversi dalla costante 0 possono essere convertiti in tipo puntatore, ma il risultato non è portabile.

Vedi anche

Conversioni di assegnazione