TPY ENGINEERING VLOG

TPY ENGINEERING VLOG(C,JAVA)

*C言語* 〜34時限目〜 ポインタ演算の仕組みについて・・・

〜目次〜

 

 

ポインタ演算の仕組みについて

C言語では、

ポインタが配列に密接な関係を持つとき、

ポインタに対して以下のような演算を行うことができます。

f:id:YuyaTerayama:20180911154526p:plain

ポインタの演算は、

四則演算などの計算とは異なります。

例えば+演算子では、

pがさしている「1つ次の要素」のアドレスを得る

という演算が行われます。

「アドレスの値に1を足す」という演算は行いません。

実際にポインタ演算を使ったコードを入力してみます。

sample74.c

f:id:YuyaTerayama:20180911154939p:plainー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

f:id:YuyaTerayama:20180911160304p:plainーsample75の実行画面ー

5人分のテストの点数を入力してください。

99

70

77

13

56

5人分のテストの平均点は63.000000点です。

avg( )関数では、配列を引数として使っています。

仮引数にはt[ ]と記述し、

実引数として配列名testを記述して渡している、

ことに注目してください。

このように、

引数として配列を使うときには、

実引数として配列名を渡します。

配列を関数に渡す場合には、

先頭要素のアドレスを渡す方法を使います。

このため、

配列は参照渡しで渡されることになります。

関数内で配列に変更を加える処理をした場合には、

実引数の配列の値が直接変更されることになります。

 

ポインタを引数として使う

同じ関数をポインタのように記述することができます。

実際にコードを入力してみてみます。

sample76.c

f:id:YuyaTerayama:20180911161106p:plainーsample76の実行画面ー

5人分のテストの点数を入力してください。

99

70

77

13

56

5人分のテストの平均点は63.000000点です。

実行画面はsample75と全く同じになっています。

avg( )関数を利用している部分のコードについても、

sample75と全く同じです。

配列を受け取る関数は、

このようにポインタで表記した仮引数を

使うことがよくあります。

実引数として配列の先頭要素のアドレスを渡す際に、

仮引数としてポインタを記述できる。

 

〜END〜