*C言語* 〜30時限目〜 ポインタから変数の値を知る・・・
〜目次〜
ポインタから変数の値を知る
ポインタに変数のアドレスが格納されると、
そのポインタから逆にたどって、元の変数の値を知る
ということができるようになります。
ポインタから変数の値をたどるには、
ポインタに対して、*という演算子を使います。
*演算子は、
間接参照演算子(indirection operator)
と呼ばれています。
この演算子を使うと、
そのポインタに格納されているアドレスに、
対応する変数の値を知ることができます。
変数の値を「間接的」に知ることができるのです。
実際に以下のコードを入力してみてみます。
sample66.c
ーsample66の実行画面ー
変数aの値は7です。
変数aのアドレスは0x7ffee21ee7b8です。
ポインタpAの値は0x7ffee21ee7b8です。
pAの値は7です。
実行画面から確認できるように、
*演算子を使うことで、変数aの値を知ることができます。
ポインタについて整理
複雑になってきたので、
一度ここでポインタについて整理していきます。
変数aとそのアドレス&aは以下のようになっています。
a・・・変数a
&a・・・変数aのアドレス
ここで「pA = &a;」と代入します。
つまり、
ポインタpAが変数aをさすようにします。
pA・・・変数aのアドレスを格納したポインタ
*pA・・・変数aのアドレスを格納するポインタがさしている変数→変数a
代入しなければ上記の2つは成り立ちません。
ポインタに別のアドレスを代入する
別の変数のアドレスを格納してみます。
実際に以下のコードをみてください。
sample67.c
ーsample67の実行画面ー
変数aの値は7です。
ポインタpAの値は0x7ffee97807b8です。
pAの値は7です。
変数bの値は10です。
ポインタpAの値は0x7ffee97807b4です。
pAの値は10です。
sample67の実行画面をみてわかる通りに、
ポインタの値を変更し、
別の変数をさすようにすることもできます。
尚、ポインタは原則として、
指定した型以外の値を格納することはできません。
ポインタに代入しない場合
ポインタに何も代入しないで、
使った場合にはどうなるのかについてみてみます。
ポインタが何もさし示していない状態で、
使ってしまうと、
コンピュータが予期せぬエラーを起こす場合があります。
なので、
できる限りポインタは以下のように、
初期化を行います。
int a = 7;
int *pA = &a;
宣言時に初期化を行うことで、
ポインタに値を代入し忘れるなどの、
ミスをなくすことができます。
ポインタを使って変数を変更する
ポインタを使うことで、
ポインタがさしている変数そのものの値を変更することができます。
実際に以下のコードを入力してください。
sample68.c
ーsample68の実行画面ー
変数aの値は7です。
*pAに10を代入しました。
変数aの値は10です。
sample68の実行画面をみてわかる通り、
「a = 10;」という代入をせずに、
「*pA = 10;」という代入の仕方で、
変数aに代入されている値が変更しています。
実際「a = 10;」でいいのではないかと思われると思います。
しかし、この仕組みを利用してポインタを使いこなす方法があるのです。
それについて次回学んでいきます。
〜END〜