C言語の学習において、ポインタはよく躓くポイントとして知られています。「Javaにポインタはない」などと表現されることがありますが、実際にポインタは存在します。 NullPointerExceptionという例外が存在することからもこれは窺えるのですが、 C言語のポインタとはちょっと違っており、名前も「参照」と改められています。 C言語のポインタが果たす3つの役割 C言語ではポインタには3つの役割がありました。 変数や構造体を指し示すもの 配列を表現するもの 関数を指し示すもの これらが渾然一体となって、コンピュータの低レベルな「アドレス」という値になって扱われるのです。これがC言語でポインタを理解することを難しくしているのではないでしょうか。 Javaではどのように置き換えるのか? Javaではこれらの3つの機能は明確に分離されています。 まず、変数や構造体を「指し示すもの」としては「参