ポインタとは

ポインタはC言語を理解する上でもっとも難解な存在だと言われています。ポインタの概念を理解するためには、システムがメモリをどのように管理しているかを理解する必要がありますし、ポインタの仕組みを理解していても、その扱いを間違えればプログラムはたちまちクラッシュしてしまいます。

ポインタは、変数がデータを保存している仕組みと深く関係しています。プログラミング言語では、データは識別子を持った変数に保存されます。しかし、物理的なコンピュータの中では主記憶装置(いわゆるメモリ)にデータが保存されます。通常、メモリは8ビット単位で区切られたアドレスを持ちます。システムは変数のような名前ではなく、整数で表現可能なアドレスによってデータの位置を特定しています。32ビットコンピュータに搭載できるメモリの最大容量が4GBという制限があるのも、32ビットの整数で表現できるアドレス範囲が4,294,967,295までだからです。

ポインタは、この変数のメモリアドレスをプログラムで利用する手法です。通常の変数ではなく、ポインタを使ってデータを管理する理由はいくつかありますが、最大の特徴はアドレス計算が可能になる点にあります。変数とは異なり、ポインタは変数が保存されているメモリ上の位置を表す整数を保存します。この整数を算術演算することで、ポインタを通して読み書きするデータの位置を自由に移動できます。ただし、適当なアドレスに自由にアクセスできるものではありません。メモリはシステムによって管理されているため、アプリケーションに権限のないアドレスを読み書きしようとするとクラッシュしてしまいます。

複雑で難解と言われるポインタですが、その実体は変数が保存されているメモリアドレスを取得して、そのメモリアドレスから間接的にデータにアクセスするというものです。この概念と、関連する文法を体系的に学習すれば難しいものではありません。本稿では、ポインタの性質と関連する文法についてご説明します。

Visual C++ 2008 Express Editionのインストールや設定方法については「ゼロからはじめるC言語 - 環境構築編」を参照してください。