この章ではポインタについての具体例と配列のアドレスとポインタについて説明します。
以下の例は変数のアドレスを関数に渡し、ポインタ変数で受け取っている例です。
*aには変数xのアドレスが入っているので、*aとxは同じ意味になります。
*bには変数yのアドレスが入っているので、*bとyは同じ意味になります。
つまり、*aは2と5を足して7になりましたが、*aが7になることによって、main関数の中のxが7に変わっています。
*bは4と5を足して9になりましたが、*bが9になることによって、main関数の中のyが9に変わっています。
つまり、配列のアドレスは配列の先頭の要素のアドレスになります。
つまり、配列名を書くだけで配列xの一番前のアドレスが取得出来ます。
つまり、xと&x[0] (配列の先頭の要素のアドレス)はまったく同じアドレスです。
配列名でアドレスを取得するのとは違って
xが先頭のアドレスを示すので、+1を付け加えることで先頭から一つアドレスを進めると言う意味になります。
つまり、
これを書き換えると
配列の2番目の要素を取り出すには
+1は先頭から一つアドレスを進めると言う意味になります。
先ほどの例をfor文を使って書き換えると以下のようになります。
1
結果は4です。
ポインタを進めた後に
さらにポインタの指している位置を進めると8が得られます。
3
ポインタを
つまり8の時点から1つ下がるので6が得られます。
では次の例を見てみましょう。
hairetsu(x);のように配列のアドレスを渡すまでは同じですが、関数本体のほうは
そして要素の数(3)だけ繰り返しループして、
つまりg[i]のiに0から2までが代入され、その都度
では次の例に進みます。
g[i]のiに0から2までが代入され、その都度
次は文字列を扱う配列とポインタの関係について説明します。
出力する時には
では次の例に進みます。
そのような時にconstを変数の前に指定します。
constをつけることにより、引数の中身を書き換えないことを明確にできるメリットがあります。
関数の引数に const を指定すると、その関数の中では値を書き換えることができなくなります。
ですので、
次の例は2次元配列とポインタの関係を学習します。
出力する方法は普通の配列と同じように添え字を使って出力します。