====== 配列の復習 ======
==== 配列の宣言 ====
型 変数名[要素数] = {初期化列};
// {初期化列}は省略してよいが、その場合は初期値不定になるよ
float farray[5] = {1.0, 2.0 ,3.0 ,4.0, 5.0};
宣言された配列は、メモリ上で必ず連続して並ぶ(変数のアドレスが連続している)\\
また、[]演算子を用いることによって、配列の先頭から番号を付けて要素にアクセスすることができる。\\
float farray[5] = {1.0, 2.0 ,3.0 ,4.0, 5.0};
farray[0] ~ farray[4]ができる
farray[0]:1.0
farray[1]:2.0
farray[2]:3.0
farray[3]:4.0
farray[4]:5.0
farray[0], farray[1], farray[2], farray[3], farray[4]それぞれは、普通に宣言した変数と同じで特に何の変哲もない\\
float a=1.0, b=2.0, c=3.0, d=4.0, e=5.0;
float farray[5] = {1.0, 2.0 ,3.0 ,4.0, 5.0};
添え字でアクセスできること以外は、a,b...で宣言した変数と「性質は何も変わらない」よ。\\
==== 関数の復習? ====
floatの引数を2個とって、その和を返す関数を作ります。\\
//floatの値を2つ足して返す関数
float fadd(float _a, float _b)//_a, _bは仮引数
{
return(_a + _b);
}
これは、特に説明いらないよね。\\
mainでこの関数を使うには、\\
//プロトタイプ宣言
//floatの引数を2個とって、その和を返す関数
float fadd(float _a, float _b);
int main()
{
float a=12.3, b=3.14;//実引数として渡す値
float c; //返す値を生成する、作業用の変数
c = fadd(a, b); //a,b 実引数
c = fadd(12.3, 3.14); //実引数は、値に置き換わり、仮引数にコピーされる
c = 15.44; 15.44<=fadd(12.3, 3.14) 15.44を返してるので
rerturn 0;
}
参考:[[https://itmanabi.com/value-reference-pass/|値渡しと参照渡し]]
===== 関数に配列の「要素」をわたす =====
上で書いたように、配列の個々の要素farray[2], farray[4]などは、float a,b;のように宣言された変数と何ら変わりはありません。\\
なので、実引数として関数に渡すのは簡単です。\\
c = fadd(farray[2], farray[4]);
//c = fadd(3.0, 5.0); farray[2],farray[4]が値に置き換わり、仮引数に値がコピーされる
これは、特に問題なくできると思います。\\
プログラムを作ってるとやりたくなるのが、配列の全要素を関数内で参照するってやつ\\
\\
===== 関数に配列の「先頭アドレス」をわたして関数内で配列の要素にアクセスしまくる =====
たとえば、「5個の要素を持つ配列farrayの和を返す関数を作りたいなぁ」とか。\\
何度か説明している通り、関数に、「引数を使って、配列全体を渡す」というエキセントリックなことはできません。\\
じゃあどうしますか?\\
//全部は渡せないから、こうする?
float sumf(float _a,float _b,float _c,float _d,float _e){省略}
float sum = sumf(farray[0],farray[1],farray[2],farray[3],farray[4]);
こんな関数作りますか?\\
要素数5個ぐらいだといいけど、100個とか200個とか要素あったらすごいことになるよね。。。\\
* 引数経由では、配列全体を関数に渡すことはできない
* 代わりの策として、配列の先頭のアドレスを渡して、添え字でアクセスすることで全体にアクセスできる
* ただし、配列がどこまで続いているかは、アドレスだけからはわからないので、配列数も一緒に渡す必要がある
* 難しいから、パターン学習で覚えちゃってもいいと思う。
例)\\
//宣言と定義では普通にに配列だよということで書ける
float sumf(float _array[], int _size)
{
float _sum = 0.0;
for(int i=0; i< _size; i++)
{
_sum = _sum + _array[i];
}
return(_sum);
}
使うときは、こんな感じ\\
int main()
{
float farray[5] = {1.0, 2.0 ,3.0 ,4.0, 5.0};
float sum;
//配列名と配列数を指定する
sum = sumf(farray, 5);
}