运用c语言,指针函数如何解

有一个一维数组a,大小为n并且赋有初值,函数float process (float *p, int n, float (p)())为一个通用
的函数完成一下功能,请编程完成下述功能函数
1.float arr_add(float a[], int n)
2.float add_add(float
p, int a);

供参考:

#include <stdio.h>
float process(float* p, int n, float (*f)(float*,int));
float arr_add(float a[], int n);
float add_add(float *p,  int a);
int main()
{
    int   n = 5;
    float a[5] = { 1,2,3,4,5 };
    printf("sum(arr_add)=%f\n", process(a, n, arr_add));
    printf("sum(add_add)=%f\n", process(a, n, add_add));
}
float arr_add(float a[], int n)
{
    int i;
    float sum = 0;
    for (i = 0; i < n; i++)
        sum += a[i];
    return sum;
}
float add_add(float* p, int a)
{
    int i = 0;
    float sum = 0;
    while (i < a) {
        sum += *(p + i);
        i++;
    }
    return sum;
}
float process(float* p, int n, float (*f)(float*, int))
{
    return (*f)(p, n);
}

你得说明一下这两个函数的功能啊
process函数干啥的?arr_add和add_add函数又是干啥的?相互之间有啥关系?


可以看下c语言参考手册中的 c语言-指针