¿Por qué se modifica una matriz de PHP cuando su elemento se asigna como referencia?

Cuando se asigna de nuevo un elemento de matriz, se modifica el contenido de la matriz:

$arr = array(100, 200);
var_dump($arr);
/* shows:
array(2) {
  [0]=>
  int(100)  // ← ← ← int(100)
  [1]=>
  int(200)
}
*/

$r = &$arr[0];
var_dump($arr);
/* shows:
array(2) {
  [0]=>
  &int(100)  // ← ← ← &int(100)
  [1]=>
  int(200)
}
*/

Vivir correr (Zend Engine funcionará bien, mientras que HHVM muestra "Proceso finalizado con el código 153").

¿Por qué se modifica el elemento?

Porque vemos&int(100) en lugar deint(100)?

Esto parece totalmente extraño. ¿Cuál es la explicación de esta rareza?

Respuestas a la pregunta(1)

Su respuesta a la pregunta