これは私のソートルーチンのテストです。float 値を保持する 7 つの変数を設定し、それらを配列に割り当てます。この配列は、最大値を見つけるために使用されます。
魔法は myMax への呼び出しにあります。
float mmax = myMax((float *)&arr,(int) sizeof(arr)/sizeof(arr[0]));
それは魔法のようでしたね。
myMax は float 配列ポインター (float *) を想定しているため、&arr を使用して配列のアドレスを取得し、それを float ポインターとしてキャストします。
myMax は、配列内の要素数も int として期待します。sizeof() を使用して配列のバイト サイズと配列の最初の要素を取得し、合計バイト数を各要素のバイト数で割ります。(一部のシステムでは 2 バイトであり、私の OS X Mac のような一部では 4 バイトであり、他のシステムでは別の値になる可能性があるため、int のサイズを推測したりハードコーディングしたりしないでください)。
注:これはすべて、データにさまざまな数のサンプルがある場合に重要です。
テストコードは次のとおりです。
#include <stdio.h>
float a, b, c, d, e, f, g;
float myMax(float *apa,int soa){
int i;
float max = apa[0];
for(i=0; i< soa; i++){
if (apa[i]>max){max=apa[i];}
printf("on i=%d val is %0.2f max is %0.2f, soa=%d\n",i,apa[i],max,soa);
}
return max;
}
int main(void)
{
a = 2.0;
b = 1.0;
c = 4.0;
d = 3.0;
e = 7.0;
f = 9.0;
g = 5.0;
float arr[] = {a,b,c,d,e,f,g};
float mmax = myMax((float *)&arr,(int) sizeof(arr)/sizeof(arr[0]));
printf("mmax = %0.2f\n",mmax);
return 0;
}