Conversioni da e verso tipi di puntatoreConversions to and from Pointer Types

Un puntatore a un tipo di valore può essere convertito in un puntatore a un tipo diverso.A pointer to one type of value can be converted to a pointer to a different type. Tuttavia, il risultato può essere non definito a causa dei requisiti di allineamento e delle dimensioni dei diversi tipi in archivio.However, the result may be undefined because of the alignment requirements and sizes of different types in storage. 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.A pointer to an object can be converted to a pointer to an object whose type requires less or equally strict storage alignment, and back again without change.

Un puntatore a void può essere convertito in o da un puntatore con un tipo qualsiasi, senza restrizioni o perdita di informazioni.A pointer to void can be converted to or from a pointer to any type, without restriction or loss of information. Se il risultato viene riconvertito nel tipo originale, il puntatore originale viene recuperato.If the result is converted back to the original type, the original pointer is recovered.

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, fatta eccezione per le restrizioni imposte dal nuovo qualificatore.If a pointer is converted to another pointer with the same type but having different or additional qualifiers, the new pointer is the same as the old except for restrictions imposed by the new qualifier.

Un valore del puntatore può inoltre essere convertito in un valore integrale.A pointer value can also be converted to an integral value. Il percorso di conversione dipende dalla dimensione del puntatore e dalla dimensione del tipo integrale, in base alle regole seguenti:The conversion path depends on the size of the pointer and the size of the integral type, according to the following rules:

  • Se la dimensione del puntatore è maggiore o uguale alla dimensione del tipo integrale, il puntatore si comporta come un valore unsigned nella conversione, ad eccezione del fatto che non può essere convertito in un valore mobile.If the size of the pointer is greater than or equal to the size of the integral type, the pointer behaves like an unsigned value in the conversion, except that it cannot be converted to a floating value.

  • 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.If the pointer is smaller than the integral type, the pointer is first converted to a pointer with the same size as the integral type, then converted to the integral type.

    Al contrario, un tipo integrale può essere convertito in un tipo di puntatore in base alle regole seguenti:Conversely, an integral type can be converted to a pointer type according to the following rules:

  • 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).If the integral type is the same size as the pointer type, the conversion simply causes the integral value to be treated as a pointer (an 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.If the size of the integral type is different from the size of the pointer type, the integral type is first converted to the size of the pointer, using the conversion paths given in the tables Conversion from Signed Integral Types and Conversion from Unsigned Integral Types. Viene quindi utilizzato come valore del puntatore.It is then treated as a pointer value.

    Un'espressione costante integrale con valore 0 o la stessa espressione trasmessa al tipo void \* può essere convertita con un cast di tipo, un'assegnazione o un confronto in un puntatore di qualsiasi tipo.An integral constant expression with value 0 or such an expression cast to type void \* can be converted by a type cast, by assignment, or by comparison to a pointer of any type. Questa operazione produce un puntatore null equivalente a un altro puntatore null dello stesso tipo, ma questo puntatore null non corrisponde a nessun puntatore a una funzione o un oggetto.This produces a null pointer that is equal to another null pointer of the same type, but this null pointer is not equal to any pointer to a function or to an object. I numeri interi diversi dalla costante 0 possono essere convertiti in un tipo di puntatore, ma il risultato non è portabile.Integers other than the constant 0 can be converted to pointer type, but the result is not portable.

Vedere ancheSee Also

Conversioni di assegnazioneAssignment Conversions