这是我的排序程序的测试。它设置了7个变量来保存浮点值, 然后将它们分配到一个数组中, 用于查找最大值。
魔法在于对myMax的调用:
float mmax = myMax((float *)&arr,(int) sizeof(arr)/sizeof(arr[0]));
那真是神奇,不是吗?
myMax期望一个浮点数数组指针(float *),因此我使用&arr获取数组的地址,并将其强制转换为浮点数指针。
myMax还期望数组中元素的数量作为int类型。我通过使用sizeof()函数获取数组和第一个元素的字节数,然后将总字节数除以每个元素的字节数来获得该值。(我们不应该猜测或硬编码int的大小,因为在某些系统上它是2个字节,在一些系统(例如我的OS X Mac)上它是4个字节,在其他系统上可能是其他值)。
注意:当数据样本数量可能变化时,所有这些都很重要。
以下是测试代码:
#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;
}