Por que um array PHP é modificado quando o elemento é atribuído a uma referência?

Ao atribuir novamente um elemento de uma matriz, o conteúdo da matriz é modificado:

$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)
}
*/

Corrida ao vivo. (Zend Engine fará bem, enquanto o HHVM mostra "Process exited with code 153".)

Por que o elemento é modificado?

Por que vemos&int(100) ao invés deint(100)?

Isso parece totalmente bizarro. Qual é a explicação para essa esquisitice?

questionAnswers(1)

yourAnswerToTheQuestion