Adloun

OCaml (option informatique) · Chapitre 5 · Exercice de TD

Le piège de la valeur partagée

Les tableaux · niveau 3 (difficile)

Énoncé

Donner le contenu final de m dans chaque cas, et expliquer.

(* A *)                                  (* B *)
let m = Array.make 2 (Array.make 2 0)    let m = Array.make_matrix 2 2 0
in m.(0).(0) <- 1; m                     in m.(0).(0) <- 1; m

Corrigé

(A) donne [|[|1; 0|]; [|1; 0|]|] : les deux « lignes » sont le même tableau (créé une seule fois par Array.make 2 0), si bien que modifier m.(0).(0) modifie aussi m.(1).(0).

(B) donne [|[|1; 0|]; [|0; 0|]|] : make_matrix crée des lignes indépendantes, donc seule la case visée change.

(Morale : pour un tableau de tableaux, jamais Array.make n (Array.make ...) ; toujours make_matrix ou Array.init n (fun _ -> Array.make ...).)

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre