Così potrebbe andare.
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int* p;
int i, somma, *x;
int N;
printf("Dammi la dimensione del vettore: ");
scanf("%d", &N);
x = (int *)malloc(N * sizeof(int));
printf("Dammi questi %d valori: \n", N);
for (i=0; i<N; i++){
scanf("%d", &x[i]);
}
somma = 0;
p = x;
for(i =0; i<N; i++){
somma+= *(p+i);
}
printf("La somma vale: %d\n", somma);
free (x);
return 0;
}
p = &x[0] è equivalente alla scrittura p = x. Entrambi i modi di scrivere fanno sì che il puntatore p, punti all'indirizzo iniziale dell'array x.
Quindi tramite l'aritmetica dei puntatori puoi puntare su tutti gli indirizzi dell'array "puntatore + indice",
per poi dereferenziarlo per accedere al contenuto di quell'indirizzo.
*(p+i).
Correggetemi se sbaglio.