Bracie @simonsoft, móc operować na wskaźnikach w takiej sytuacji wprawdzie można, ale nie ma to sensu. Wskaźników/niestałych referencji do typów prostych się używa głównie po to, żeby wewnątrz funkcji móc je zmodyfikować, natomiast do typów złożonych jak instancje struktur/klas po to, aby uniknąć kosztownego kopiowania, a które nie występuje przy typach prostych.
odpowiadając na twoje pytanie, tak będzie wyglądać funkcja add operująca na wskaźnikach:
int* add(int *component1, int *component2)
{
int *result = malloc(sizeof(int));
*result = *component1 + *component2;//nietrudno się kopsnąć i zapisać to jako np component1 + component2, przypisać nie do *result a result itp - naprawdę wierz simonsoft, że w przypadku kiedy nie potrzebujesz modyfikować przesłanych parametrów to szkoda zachodu, i komplikowania sobie życia.
return result;
}
wywołanie zaś wyglądać będzie następująco:
....
int a = 2, b = 2;
int *result = add(&a, &b);
//TU UWAGA - musisz w wypadku używania zaalokowanej w funkcji add pamięci pamiętać o jej zwolnieniu!
free(result);