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;
}
解决方案
您使用宏(即#define ...
)来指定SIZE
. 无论您在何处使用该宏都会“以文本方式”扩展它,并在相应的上下文中对其进行解释,即它的含义取决于您放置它的位置。
所以在 main 中,number
作为宏的一部分是指全局变量number
,而在函数的上下文中average
,它指的是函数参数number
(它隐藏了同名的全局变量)。
无论如何,不可能从指针变量中推断出任何数组大小。您必须将元素的数量作为额外参数传递。
推荐阅读
- python-3.x - os.system() 是在 Python 脚本中获取一组文件的最佳方法吗?
- python-3.x - 如何忽略 sympy.solve 复杂的解决方案
- python - Jupyter Book,如何更改字体或间距(文本格式)
- javascript - 使用反应上下文的问题
- c++ - Memcpy 数据直接存入 std::vector
- ssis - SSIS Azure 工具在 VS2019 Azure SSIS 工具箱中显示为灰色
- spring-boot - 网关处的 Prometheus 指标:未知而不是 uri 中的路径
- spring-boot - Spring MVC + Elastic Beanstalk | 找不到嵌套在目录中的模板
- python - 使用 Openpyxl 进行迭代时出现 MemoryLoadError
- assembly - 汇编OFFSET在一条指令中使用了两次,什么是offset的偏移量?