为什么平均值函数中的变量与主函数中的相同变量不同?我不知道如何解决,因为我只是在学习。
#include <stdio.h>
#define SIZE (sizeof(number)/sizeof(int))
int number[] = {5,65,84,25,644,2};
int average(int *number)
{
printf("size = %ld\n",SIZE);
int sum=0;
for(int i=0;i<=SIZE ;i++)
{
sum += number[i];
}
return sum/SIZE;
}
int main()
{
printf("average : %d\n",average(number));
printf("number of elements: %ld\n", SIZE);
return 0;
}
答案 0 :(得分:1)
您使用宏(即#define ...
)来指定SIZE
。无论您在何处使用该宏,它都会“按文本方式”进行扩展,并且会在相应的上下文中进行解释,即其含义取决于您将其放置在何处。
因此,在主体中,number
作为宏的一部分引用了全局变量number
,而在函数average
的上下文中,它引用了函数参数{{1} }(隐藏同名的全局变量)。
无论如何,不可能从指针变量推断出任何数组大小。您必须将元素数量作为额外的参数传递。
答案 1 :(得分:0)
在main
中,number
是一个全局变量,它是一个数组。因此sizeof(number)
为您提供了整个数组的大小(以字节为单位)。
但是在average
函数中,number
是函数的参数,类型为int *
。因此,在这种情况下,sizeof(number)
为您提供了指针的大小,而不是数组的大小。
要么不传递参数而仅使用全局参数,要么将数组的大小作为单独的参数传递给函数。
答案 2 :(得分:0)
您已经定义了一个全局变量number
,它是一个数组。
在函数average
中,您定义了另一个具有相同名称/标识符number
的变量(尽管类型不同,即指针)。
现在,当您在主函数中使用number
时,实际上是在使用指针number
,而不是全局变量number
。这也称为变量隐藏。
如果您要使用全局变量,请将average
函数的参数名称更改为其他名称,否则您可以采用困难的方式执行类似this的操作。
快乐编码;)