*C言語* 〜29時限目〜 アドレスの仕組みについて・・・
〜目次〜
アドレスの仕組みについて
変数の値がコンピュータのメモリに記憶されることは、
すでに学びました。
C言語には、メモリの位置を直接あらわす
「ポインタ」という機能が用意されています。
ポインタはなかなかわかりにくい仕組みなので、
頑張って覚えていきます。
まずはじめに、メモリの位置を直接あらわす
アドレス(address:番地)
について学んでいきます。
C言語での「アドレス」とは、
メモリの場所を直接あらわすために使われる、
メモリ上の「住所」のことです。
変数のアドレスについて
しかし、「メモリ」や「アドレス」といっても、
イメージできないと思います。
変数の値が格納されているメモリのアドレスを知るには、
アドレス演算子(address operator)
の&を使います。
以下のようにして使います。
&変数名 (変数のアドレスをあらわします)
実際にアドレスを出力してみます。
以下のコードを入力してみてください。
sample64.c
ーsample64の実行画面ー
変数aの値は7です。
変数aのアドレスは0x7ffeee3877b8です。
「&a」によって、
変数aの値がメモリ上の「どの位置」に記憶されているのか
を知ることができます。
アドレスを出力するには、
変換仕様として%pを使います。
「0x7ffeee3877b8」という値が出力されていますが、
これが「アドレス」になります。
0x7ffeee3877b8というメモリの位置に格納されているということです。
これは実行状況により変化するので、
違った値が出力されると思います。
ここで大事なのは、
アドレスを使って、メモリ上の位置をあらわすことができる
ということなのです。
ポインタの仕組みについて
アドレスを使うコードを記述するために、
アドレスを格納する特殊な変数
を学んでいきます。
この変数のことを、
ポインタ(pointer)
と呼びます。
ポインタの使い方は原則として、
これまでの変数と同じです。
ポインタも使う前に「pA」などという名前を決めて宣言します。
ただし、ポインタをあらわす変数には、
「*」という記号をつけて宣言することになっています。
ポインタの宣言は以下の通りです。
型名 *ポインタ名;
実際にポインタに何かアドレスを格納する、
プログラムを入力してみます。
sample65.c
ーsample65の実行画面ー
変数aの値は7です。
変数aのアドレスは0x7ffeed4eb7b8です。
ポインタpAの値は0x7ffeed4eb7b8です。
8行目でポインタpAに変数aのアドレスを、
格納するという作業ができています。
ポインタpAの値として出力される値は、
変数aのアドレスである、&aと同じになっています。
変数aとポインタpAの間には何かしらの「関係」ができた
と見ることもできます。
この「関係」のことを、
pAは変数aをさす
などといったりします。
変わった言い方ですが、
pAの値が、変数aの場所をさし示すようになった
と考えるとイメージしやすくなります。
今回は少し短いですが、
ここまでになります。
次回からポインタについてさらに詳しくやっていきます。
〜END〜