定义的变量不同

时间:2018-11-12 18:56:09

标签: c

为什么平均值函数中的变量与主函数中的相同变量不同?我不知道如何解决,因为我只是在学习。

#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;
}

3 个答案:

答案 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的操作。

快乐编码;)