# C 程序：使用指针，递归和函数来查找数组元素的总和

> 原文： [https://beginnersbook.com/2014/06/c-program-to-find-sum-of-array-elements-using-pointers-recursion-functions/](https://beginnersbook.com/2014/06/c-program-to-find-sum-of-array-elements-using-pointers-recursion-functions/)

在本教程中，我们将学习以下两种方法来找出数组元素的总和：

1）使用递归

2）使用指针

### 方法 1：使用递归的数组元素的总和：函数调用自身

该程序调用用户定义的函数`sum_array_elements()`，函数以递归方式调用自身。这里我们对数组元素进行了硬编码，但是如果你想让用户输入值，你可以使用`for`循环和`scanf`函数，就像我在本文的下一节（方法 2：使用指针）中所做的那样。

```c
#include<stdio.h>
int main()
{
   int array[] = {1,2,3,4,5,6,7};
   int sum;
   sum = sum_array_elements(array,6);
   printf("\nSum of array elements is:%d",sum);
   return 0;
}
int sum_array_elements( int arr[], int n ) {
   if (n < 0) {
     //base case:
     return 0;
   } else{
     //Recursion: calling itself
     return arr[n] + sum_array_elements(arr, n-1);
    }
}
```

输出：

```c
Sum of array elements is:28
```

### 方法 2：使用指针的数组元素的总和

这里我们设置指向数组基址的指针然后我们递增指针并使用`*`运算符来获取和汇总所有数组元素的值。

```c
#include<stdio.h>
int main()
{
   int array[5];
   int i,sum=0;
   int *ptr;

   printf("\nEnter array elements (5 integer values):");
   for(i=0;i<5;i++)
      scanf("%d",&array[i]);

   /* array is equal to base address
    * array = &array[0] */
   ptr = array;

   for(i=0;i<5;i++) 
   {
      //*ptr refers to the value at address
      sum = sum + *ptr;
      ptr++;
   }

   printf("\nThe sum is: %d",sum);
}
```

输出：

```c
Enter array elements (5 integer values): 1 2 3 4 5
The sum is: 15
```