Un puntero no almacena
directamente un objeto sino que suele almacenar la dirección de memoria de un
objeto (o sea, apunta a un objeto) Para obtener a partir de un puntero el
objeto al que apunta hay que aplicarle al mismo el operador prefijo *,
que devuelve el objeto apuntado. Por ejemplo, el siguiente código imprime en
pantalla un 10:
int x = 10;
int * px= &x;
Console.WriteLine(*px);
Es posible en un puntero
almacenar null
para indicar que no apunta a ninguna dirección válida. Sin embargo,
si luego se intenta acceder al contenido del mismo a través del operador *
se producirá generalmente una excepción de tipo NullReferenceException (aunque
realmente esto depende de la implementación del lenguaje) Por ejemplo:
int * px = null;
Console.WriteLine(*px); //
Produce una NullReferenceException
No tiene sentido aplicar * a
un puntero de tipo void * ya que estos punteros no almacenan
información sobre el tipo de objetos a los que apuntan y por tanto no es
posible recurperarlos a través de los mismos ya que no se sabe cuanto espacio
en memoria a partir de la dirección almacenada en el puntero ocupa el objeto
apuntado y, por tanto, no se sabe cuanta memoria hay que leer para obtenerlo.