はじめに
C言語でつまずき易い個所の一つにポインタというものがあります。
私自身ポインタを覚えるのに苦労しましたし、C言語から少し離れていると忘れがちになるので今回の記事を書くことにしました。
ポインタとは何か
変数を宣言する際は対象の型の後に変数名を下記のように書きます。値を入れる場合はさらに=と値を追加します。
ポインタはこのような値ではなく、メモリのアドレスを持った変数のことです。
int a;
int b = 1;
ポインタはこのような値ではなく、メモリのアドレスを持った変数のことです。
int *c;
これだけではただポインタ変数が宣言されただけです。これに配列を入れてみます。
int *c;
int array[3] = {1,2,3];
c = array;
これでポインタ変数cにint配列arrayのアドレス先頭を指すようになりました。これでcからアドレスを辿って配列arrayの値を扱えるようになります。
変数cの前に*を付けると、アドレス内部の値を取りだしてくれます。しかし取り出せるのは先頭の値だけなので他の配列の値を取りだす場合は、アドレスに
加算して配列内部の別の値のアドレスとすることで取り出せるようになります。
printf("%d\n",*c);
//output: 1
printf("%d\n",*(c+1));
//output: 2
ではこれが何の役に立つのか。値をコピーするだけなら別の変数に同じ値を入れるだけでいいはずです。
役に立つのはメモリの節約です。
同じ値をコピーする場合はその変数と同じだけメモリを使うことになります。しかしポインタであればどのような変数であろうともアドレスだけで同じ値を参照できるようになるのです。
おわりに
以上でポインタの説明はおわりです。