(4-3)ポインタ型変数
C言語にはポインタ型変数(通常は単にポインタと呼びます)というものがあります。 ポインタとはメモリのアドレス値を持つ変数です。 ポインタを使用しますとメモリのアドレス値を指定して演算させることができます。 具体的な使い方は後述しますので、ここでは「ポインタというものがあるんだな」という程度にご理解ください。
型 | 確保されるメモリサイズ |
---|---|
void * | 4バイト |
char * | 4バイト |
short * | 4バイト |
int * | 4バイト |
long * | 4バイト |
long long * | 4バイト |
float * | 4バイト |
double * | 4バイト |
long double * | 4バイト |
ポインタを宣言するときは整数型または実数型の「型」の後に「*」を付けます※1。
MinGWのgccは32ビットモードなので確保されるメモリサイズは4バイト※2になります。
ポインタは他にも関数※3へのポインタやポインタのポインタというものもあります。
- ※1
- ここでvoid型というものが出てきました。void型とは「型なし(0バイト)」を意味します。 型がない(0バイト)なので通常の変数としては宣言できません。 void型はポインタとして宣言するときや、関数※2の引数や戻り値が無いことを表すときなどに使用します。
- ※2
- C言語以外でもそうなのですが、CPUが扱うアドレスには「物理アドレス」と「論理アドレス」の2種類があります。 「物理アドレス」とはハードウェアに直接アクセスする際に使用するアドレスのことなのですが、 一般的なアプリケーションからはこの物理アドレスを使用することはできません。 それに対して「論理アドレス」とはCPU(MMU)及びOS(Windows)が「物理アドレス」をアプリケーションでも扱えるように「論理アドレス」というものに変換したアドレスのことです。 今後、単に「アドレス」と言った場合にはこの「論理アドレス」をさします。 なお、ここでメモリサイズが4バイトということはMinGWのGCCを用いますとOS(Windows)から割り当てられるメモリサイズの合計は4バイト(4GB)以下ということになります。
- ※3
- 「関数」とは数学で云うところの「関数」をイメージして頂ければ良いと思います。 その他にC言語ではサブルーチンを作る時も関数を利用します。 C言語はすべて関数で構成されます。 詳しくは後述します。