c - 使用指针的辅助函数
问题描述
我正在尝试实现一个辅助函数,对给定数组中的整数求和,然后使用指针更改主函数中的“array_sum”变量,而不是在帮助函数中返回一个整数。但是,我收到以下错误,“分段错误(核心转储)”任何帮助将不胜感激
void get_sum(int array[], int* array_sum)
{
int length = sizeof(array)-1;
int i = 0;
for(i=0;i<length;i++){
*array_sum+= array[i];
}
}
main()
{
int array_sum;
int my_array[] = {25, 18, 6, 47, 2, 73, 100};
get_sum(my_array, array_sum);
printf("sum = %d", array_sum);
}
预期结果:
总和 = 271
实际结果:
分段错误(核心转储)
解决方案
array_sum
当函数需要它的地址时,您正在按值传递。发生分段错误是因为您取消引用的函数中的array_sum
行将尝试将其值视为内存地址。
此外,当数组作为参数传递给函数时,它会衰减为指向其第一个元素的指针,从而丢失长度信息。sizeof
在这种情况下不会给你数组的长度。
您可以将“长度”参数传递给函数,也可以在数组末尾使用标记值来指示函数何时停止处理数组。前一种选择是最省事的。
推荐阅读
- reactjs - 使用 React Redux 从 f 中的集合中删除项目
- laravel - 在 laravel 5.7 中注册后自动登录
- python - 计算线性回归的斜率和截距误差
- c# - 具有 FromForm 绑定到 IFormFile 属性的 C# 集成测试控制器
- android - Android 活动不会从工具栏返回到主要活动
- python - 如何获得一个列表,它是许多列表的笛卡尔积
- python - 希望使用 argparse 设置全局默认参数
- java - 在 DataProvider 为单个测试方法运行具有不同数据的多个测试的情况下,在 TestNG/Maven 报告中获取测试方法名称
- c++ - 通过 QTextStream 反复读写 QBuffer
- java - 如何在unity3d中修复“JAVA_HOME环境引用目录”