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; mCorrigé
(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
- Renverser en place corrigé
- Recherche avec
optioncorrigé - Les fonctions du module
Arraycorrigé - Transposée d'une matrice corrigé
- Le crible d'Ératosthène corrigé