首页 > 解决方案 > 使用指针的辅助函数

问题描述

我正在尝试实现一个辅助函数,对给定数组中的整数求和,然后使用指针更改主函数中的“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

实际结果:

分段错误(核心转储)

标签: cpointers

解决方案


array_sum当函数需要它的地址时,您正在按值传递。发生分段错误是因为您取消引用的函数中的array_sum行将尝试将其值视为内存地址。

此外,当数组作为参数传递给函数时,它会衰减为指向其第一个元素的指针,从而丢失长度信息。sizeof在这种情况下不会给你数组的长度。

您可以将“长度”参数传递给函数,也可以在数组末尾使用标记值来指示函数何时停止处理数组。前一种选择是最省事的。


推荐阅读