Conversiones entre tipos de puntero

Un puntero a un tipo de valor se puede convertir a un puntero a un tipo diferente.Sin embargo, el resultado puede ser indefinido debido a los requisitos de alineación y tamaños de almacenamiento diferente de los tipos.Un puntero a un objeto se puede convertir a un puntero a un objeto cuyo tipo requiere menos o la alineación igualmente estricta de almacenamiento, y viceversa sin cambios.

Un puntero a void se puede convertir a o desde un puntero a cualquier tipo, sin la restricción o la pérdida de información.Si el resultado se convierte al tipo original, se recupera el puntero original.

Si un puntero se convierte en otro puntero con el mismo tipo pero tener calificadores diferentes o adicionales, el nuevo puntero es igual que el anterior salvo las restricciones impuestas por el nuevo calificador.

Un valor de puntero también se puede convertir en un valor entero.La ruta de conversión depende del tamaño de puntero y el tamaño del tipo entero, según las reglas siguientes:

  • Si el tamaño de puntero mayor o igual que el tamaño del tipo entero, el puntero se comporta como un valor sin signo en la conversión, salvo que no se puede convertir a un valor flotante.

  • Si el puntero es menor que el tipo entero, el puntero primero se convierte en un puntero con el mismo tamaño como el tipo entero, después se convierte a entero el tipo.

A la inversa, un tipo entero puede convertirse a un tipo de puntero según las reglas siguientes:

  • Si el tipo entero es el mismo tamaño que el tipo de puntero, la conversión implica simplemente el valor entero que se tratará como puntero (un entero sin signo).

  • Si el tamaño del tipo entero difiere del tamaño del tipo de puntero, el tipo entero primero se convierte al tamaño de puntero, mediante rutas de conversión incluidas en las tablas Conversión de tipos enteros con signo y Conversión de tipos enteros de Unsigned.Se trata como valor del puntero.

Una expresión constante entera con una expresión de valor 0 o por para escribir void * se puede convertir mediante una conversión de tipo, por la asignación, o en un puntero de cualquier tipo.Esto genera un puntero NULL que sea igual a otro puntero NULL del mismo tipo, pero este puntero NULL no es igual a ningún puntero a una función o un objeto.Los enteros distinto de la constante 0 se pueden convertir al tipo de puntero, pero el resultado no es portátil.

Vea también

Conceptos

Conversiones de asignación