In x= sum_array(i,N);
i
- итератор вашего цикла, поэтому после завершения цикла он указывает на первую позицию после массива.
Вместо этого вы должны передать исходный массив x= sum_array(a,N);
В функции sum вы просто отбрасываете переданный указатель и заменяете его на локальный a[]
.
int sum_array( const int *p, int n)
{
int sum = 0;
int *end = &p[n]; // first element after the array.
for(; p<end; p++) // just use p because you don't need the reference to the start of the array
{
sum += *p;
}
return sum;
}
но, как вы сказали, запись массива не разрешена, вы можете изменить ее следующим образом
#include "stdio.h"
#define N 5
int sum_array( const int *p, int n)
{
int sum = 0;
const int *end = p+n; // first element after the array.
for(; p<end; p++)
{
sum += *p;
}
return sum;
}
int main()
{
int *a, *i, x;
a = malloc(N * sizeof(*a));
if (a == NULL)
exit(-1);
printf("Enter %d Numbers: ", N);
for(i=a; i<a+N; i++)
{
scanf("%d", i);
}
// all the input values get scanned as i or the array a
x= sum_array(a,N); // pass the array address, not a pointer past last element
printf("the sum is %d\n", x);
return 0;
}