*C言語* 〜34時限目〜 ポインタ演算の仕組みについて・・・
ポインタ演算の仕組みについて
C言語では、
ポインタが配列に密接な関係を持つとき、
ポインタに対して以下のような演算を行うことができます。
ポインタの演算は、
四則演算などの計算とは異なります。
例えば+演算子では、
pがさしている「1つ次の要素」のアドレスを得る
という演算が行われます。
「アドレスの値に1を足す」という演算は行いません。
実際にポインタ演算を使ったコードを入力してみます。
sample74.c
ーsample74の実行画面ー
test[0]の値は99です。
test[0]のアドレスは0x7ffeed9b07a0です
testの値は0x7ffeed9b07a0です。
test+1の値は0x7ffeed9b07a4です。
*(test+1)の値は70です。
sample74では、+演算子を使ってポインタの足し算を行なっています。
testに1を足した「test+1」を出力しています。
すると、
1つ次の要素である、配列の2番目の要素のアドレス
が出力されています。
*演算子を使うことで、
配列の2番目の要素の値も知ることができました。
配列名を使うときの注意
配列名は配列の先頭要素のアドレスを、
格納しているポインタと同じであると考えることができます。
ただし、
このポインタは通常のポインタと異なる部分があります。
それは、
配列名であらわされるポインタには、
ほかの変数のアドレスを代入することができない
ということです。
通常のポインタではほかの変数のアドレスを、
代入することができました。
しかし、
配列名は、その配列の先頭要素以外のアドレスを、
あらわすことはできません。
配列を引数として使う
まず配列を関数の引数として使うプログラムを作成します。
以下がコードになります。
sample75.c
ーsample75の実行画面ー
5人分のテストの点数を入力してください。
99
70
77
13
56
5人分のテストの平均点は63.000000点です。
avg( )関数では、配列を引数として使っています。
仮引数にはt[ ]と記述し、
実引数として配列名testを記述して渡している、
ことに注目してください。
このように、
引数として配列を使うときには、
実引数として配列名を渡します。
配列を関数に渡す場合には、
先頭要素のアドレスを渡す方法を使います。
このため、
配列は参照渡しで渡されることになります。
関数内で配列に変更を加える処理をした場合には、
実引数の配列の値が直接変更されることになります。
ポインタを引数として使う
同じ関数をポインタのように記述することができます。
実際にコードを入力してみてみます。
sample76.c
ーsample76の実行画面ー
5人分のテストの点数を入力してください。
99
70
77
13
56
5人分のテストの平均点は63.000000点です。
実行画面はsample75と全く同じになっています。
avg( )関数を利用している部分のコードについても、
sample75と全く同じです。
配列を受け取る関数は、
このようにポインタで表記した仮引数を
使うことがよくあります。
実引数として配列の先頭要素のアドレスを渡す際に、
仮引数としてポインタを記述できる。
〜END〜