参考ページ→ポインタ操作
データを『指し示すアドレスデータ』がポインタと呼ばれました。
そして、ポインタを扱うデータをいくつか紹介しました。その代表的なものは
配列の名前と、 scanfの引数で指定した & 変数 の表現です。例を示します。
この例において、caはchar要素が並ぶ先頭要素のアドレスですが、
それは(char *)型で、『char型を指し示すポインタ型』と呼びます。
また、& ddの式はddの名前のdouble型変数が存在するアドレスですが、
それは(double *)型で、『double型を指し示すポインタ型』と呼びます。
ここで、示した(char *)や(double *)型の *の部分は、
演算子ではなく、ポインタ宣言に使う宣言子です。
つまり、char *やdouble *を
使って変数を宣言すると、それぞれのデータを『指し示すアドレスデータ』を記憶することができます。
以下でその例を示します。
pとddpがポインタ変数です。
pに配列caの先頭要素のポインタを記憶させたので、
pに対して、*演算子や[]変算子を使った配列操作が可能になります。
ここで例えば上記プログラムのデータ記憶域が、次の 表 のように割り当てられる場合、
ca[5]=99 ; の
ような間違った使い方をしても実行エラーにならずに、
隣の変数ddの一部が変更されてしまう場合があるので注意が必要です。
ca[0] | ca[1] | ca[2] | ca[3] | ca[4] | dd | |
---|---|---|---|---|---|---|
? | ? | ? | ? | ? | 99 |
;
上記のテキストボックス内を編集し、上の 表 において、
の色のca配列要素の記憶内容を
に変更する式に変更して、
。
なお、ポインタ変数pと[]演算子を使った表現で、
必要ないスペースは入れないでください。
なおpやddpは変数なので、p = ca;のように記憶内容を変更することができます。
つまり、次のようにp++;による変更も可能です。
対して、caの配列名は、要素を並べた記憶域の先頭位置を表現しているので変更できません。