Todas as linguagens que eu conheço permitem passar qualquer valor por referência, mas algumas, como as três citadas citadas, que não possuem nem ponteiro, nem referência, só permitem encapsulando o objeto a ser passado por referência em outro objeto que já é por referência naturalmente, como bem demonstrado no exemplo acima. Só não daria para fazer isso em uma linguagem de programação que não tem referência alguma, ou não permita colocar qualquer objeto dentro de outro por referência.

Embora dê para estudar todas as estruturas de dados e algoritmos em todas as linguagens, não da forma como ela funciona de fato, teria que fazer um contorno, e dificulta entender o que de fato está acontecendo. Continuaria parecendo mágica. Por isso C é interessante, e simples. C++ e Rust também dão, mas são complicadas.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).