include <stdio.h>
int sumUp(int arr[])
{
int sum = 0 ;
int a = sizeof(arr)/sizeof(arr[0]);
for(int i=0;i<a;i++)
{
sum = arr[i];
}
printf("%d\n",a);//为什么a会为1?
printf("%d\n",sum);
return sum;
}
int highestScore(int arr[])
{
int a = sizeof(arr)/sizeof(arr[0]);
int temp = arr[0];
for(int i=0;i<a;i++)
{
if(arr[i+1]> temp)
{
temp = arr[i+1];
}
}
return temp;
}
int lowestScore(int arr[])
{
int temp = arr[0];
int a = sizeof(arr)/sizeof(arr[0]);
for(int i=0;i<a;i++)
{
if(arr[i+1]<temp)
{
temp = arr[i+1];
}
}
return temp;
}
int averageScore(int arr[])
{
int a = sizeof(arr)/sizeof(arr[0]);
return sumUp(arr)/a;
}
/*int fromHighest2Lowest(int arr[a])
{
for(int i=0;i<a;i++)
{
int temp;
}
}
*/
int main()
{
int score[]={61,98,75,63,82,79,81,51,69,84};
printf("%d\n",sizeof(score)/sizeof(score[0])); //这里输出的是10,为什么sumUp输出的a为1?
printf("考试的总分是:%d\n",sumUp(score));
/* printf("考试的平均分是:%d\n",averageScore(score));
printf("考试的最高分是:%d\n",highestScore(score));
printf("考试的最低分是:%d\n",lowestScore(score));
*/
getchar();
return 0;
}
首先,sizeof的处理时间是在编译期,也就是说对于动态生成的数组大小不能算。
其次,出现错误的原因上面的答案也说了,是因为函数参数是传值,而值只是一个指针的形式,所以计算大小并不正确。
最后如果是用c++实现,可以把传值变成传引用,对于非动态的数组,可以计算出元素个数
int sumUp(int arry[])的等价写法是int sum(int *arry)这样看应该好理解一些
另外sizeof在c语言中可不是函数,而是在编译期求值的
因为传数组是传址调用哦
int arrptr = (int )malloc(sizeof (int));
int array[10];
printf("%d %d", sizeof(arrptr), sizeof(array));
你就明白了
sizeof是在编译时进行的
你传进来的是指针,是个地址,对一个地址取大小那就是4啊,或者64位系统为8,