El operador de desreferencia es un símbolo utilizado en la programación de computadoras para recuperar un valor ubicado en una dirección de memoria específica. El operador, generalmente representado por un asterisco en el código fuente, se aplica antes de una variable que apunta a una dirección de memoria o puntero. A veces llamado operador de indirección, también se puede usar al declarar o inicializar variables para indicar que son punteros a un tipo de datos y no al tipo de datos en sí. Al determinar el orden de las operaciones, el operador de desreferencia tiene prioridad sobre casi todos los operadores matemáticos estándar.
Para comprender lo que hace este operador, es importante comprender cómo funcionan los tipos de datos en la programación de computadoras. Una variable en un programa puede contener un valor. Muchas veces, esto es simplemente un número entero o una cadena de caracteres. Otras veces, puede ser una dirección de memoria que apunta a un valor entero. Las variables que contienen direcciones de memoria se denominan punteros.
Cuando sea necesario asignar, modificar o recuperar los datos que están almacenados en la dirección de memoria que contiene un puntero, se debe utilizar el operador de desreferencia. Si se realiza una operación matemática, como una suma, en una variable de puntero sin desreferenciarla, la operación se realizará en la dirección de memoria y no en la variable a la que apunta. Hay ocasiones en las que las operaciones aritméticas realizadas en direcciones de memoria pueden mejorar la eficiencia, como en el caso de pasar por una matriz, razón por la cual existe esta funcionalidad. Cuando se utiliza el operador de desreferencia en un puntero, todas las operaciones se realizarán en los datos que se almacenan en la ubicación de la memoria y no en la dirección de la memoria en sí.
El operador también se puede utilizar al declarar inicialmente una nueva variable. Al colocar el operador entre el tipo de variable y el nombre de la variable, indicará que la nueva variable debe ser un puntero a un tipo de datos y no solo una instancia del tipo. Las variables que se crean de esta manera deben inicializarse con algún tipo de función de asignación de memoria, porque el administrador de memoria que utiliza el programa deberá establecer el puntero en una ubicación de memoria no utilizada.
Hay algunos peligros que deben evitarse al utilizar el operador de desreferencia. Lo más notable es intentar eliminar la referencia a un puntero que es nulo o indefinido. El puntero técnicamente no tiene dirección de memoria, por lo que se generarán diferentes errores o excepciones que detendrán la ejecución de un programa. Existen versiones nulo-seguras del operador de desreferencia que no causarán un error, pero estos operadores tienen una sintaxis diferente.