この章ではポインタについての具体例と配列のアドレスについて説明します。
以下の例は変数のアドレスを関数に渡し、ポインタ変数で受け取っている例です。
*aには変数xのアドレスが入っているので、*aとxは同じ意味になります。
*bには変数yのアドレスが入っているので、*bとyは同じ意味になります。
次の例では配列のアドレスとポインタについて説明します。
配列自体のアドレスは配列の先頭アドレスを指すということです。
これは
では前から3番目のアドレスを得るためにはどうしたらいいでしょうか?
結果は以下のように
「*(x+0)」は「*x」と同じですので、以下のようにも書くことができます。
配列の前から2番目の要素を取得するには
配列の前から3番目の要素を取得するには
結果は以下の通りです。
次の例ではポインタの加算を使った値の書き換え方法について説明します。
そして、*(g+0)=34;の箇所で配列の一番前の要素に34を代入して、
*(g+1)=46;の箇所で配列の前から二番目の要素に46を代入して、
*(g+2)=98;の箇所で配列の前から三番目の要素に98を代入しています。
先ほどの例をfor文を使って書き換えると以下のようになります。
次はポインタに関する演算について説明します。
結果は4です。
つまり、ポインタに加算子を使っているわけです。
最初のg++;でポインタを進めた後に
さらに2つ目のg++;でポインタを進めると8が得られます。
では次の例に進みます。
hairetsu(x);のように配列のアドレスを渡すまでは同じですが、関数本体のほうは
そして要素の数(3)だけ繰り返しループして、
つまりg[i]のiに0から2までが代入され、その都度
では次の例に進みます。
g[i]のiに0から2までが代入され、その都度
次は文字列を扱う配列とポインタの関係について説明します。
この配列をポインタを使って書き換えると以下のように書くことが出来ます。
では次の例に進みます。
そのような時にconstを仮引数の前に指定します。
関数の引数に const を指定すると、その関数の中では値を書き換えることができなくなります。
ですので、
次の例は2次元配列とポインタの関係について説明します。
基本構文は以下の通りです。