Que l'expression *E soit correctement typée ne garantit absolument pas qu'elle désigne un objet, autrement dit qu'elle pointe vers quelque chose ou réfère à quelque chose. L'expression arithmétique 1/(1-1) est aussi correctement typée, mais provoquera aussi une erreur à l'exécution.
Le cas le plus usuel est celui où E est simplement une variable p de type pointeur de t ; c'est seulement quand p a été initialisée à une valeur non-nulle, que l'on peut dire que p << pointe >>, et donc que l'on peut utiliser *p en tant que variable de type t. Un pointeur initialisé à 0 ne pointe sur rien. D'où l'importance de l'initialisation pour les pointeurs.
La figure représente symboliquement un pointeur qui ne
pointe vers rien, et un pointeur qui pointe. Seul ce dernier peut être
déréférencé.
Tout programmeur C aura obtenu comme résultat de l'exécution d'un programme un << Segmentation fault >> inattendu. Cela est généralement dû à la déréférenciation d'un pointeur non-initialisé :
int *p; *p = 4;
Il y a dans ce cas tentative d'affecter une valeur à une variable, *p, qui n'existe pas. On obtiendrait la même erreur si l'on tentait de lire *p dans les mêmes conditions.