C 定义的变量不同

C 定义的变量不同,c,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

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

#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;
}
#包括
#定义大小(sizeof(number)/sizeof(int))
整数[]={5,65,84,25644,2};
整数平均值(整数*数字)
{
printf(“大小=%ld\n”,大小);
整数和=0;

对于
main
中的(int i=0;i,
number
是一个全局变量,它是一个数组。因此
sizeof(number)
以字节为单位给出整个数组的大小

但是,在
average
函数中,
number
是该函数的一个参数,其类型为
int*
。因此,在这种情况下,
sizeof(number)
会给出指针的大小,而不是数组的大小

不要传递参数而只使用全局参数,或者将数组的大小作为单独的参数传递给函数。

可以使用宏(即
\define…
)来指定
大小。
。宏以“文本”方式展开无论你在哪里使用它,它都会在各自的上下文中被解释,也就是说,它的意义取决于你放置它的位置

因此,在主要情况下,
number
作为宏的一部分引用全局变量
number
,而在函数
average
的上下文中,它引用函数参数
number
(隐藏同名全局变量)


无论如何,无法从指针变量推断任何数组大小。必须将元素数作为额外参数传递。

您已经定义了一个全局变量
number
,它是一个数组

在函数
average
中,您定义了另一个具有相同名称/标识符
number
的变量(尽管类型不同,例如指针)

现在,当您在主函数中使用
number
时,实际上使用的是指针
number
,而不是全局变量
number
。这也称为变量隐藏

如果您想使用全局变量,请将
average
函数的参数名称更改为其他名称,或者您可以不遗余力地执行类似操作


Happy Coding;)

这就是为什么使用全局变量会有问题的一个例子吗?@RandomDavis在某种程度上是的,因为它说明了内部作用域中的变量如何在更高的作用域中屏蔽具有相同名称的变量。哇!我没有看到宏错误。+1表示欢迎。如果有帮助,请不要忘记将其中一个答案标记为“acceped”按绿色箭头。谢谢!如果其中一个答案解决了您的问题,您应该。