首页 > 为什么不能在自定义函数里用sizeof()计算数组元素个数

为什么不能在自定义函数里用sizeof()计算数组元素个数

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,

【热门文章】
【热门文章】