Et puisque tu y tiens, voilà la sémantique complète des pointeurs C en CAML, avec l'arithmétique de pointeur :
type 'a ptr = ('a array*int) option
let null = (None:'a ptr)
let calloc n zero = (Some (Array.make n zero,0):'a ptr)
let deref (Some (v,i):'a ptr) = v.(i)
let modify (Some (v,i):'a ptr) x = v.(i) <- x
let add (Some (v,i):'a ptr) j = (Some (v,i+j):'a ptr)
let sub (Some (v,i):'a ptr) (Some (_,j):'a ptr) = j-i
Tu vois bien que null *c'est* None, et que ça n'a absolument rien à voir avec le reste des pointeurs... (d'ailleurs ça balance une exception dès qu'on y touche)