Вы возвращаете указатель на локальную переменную функции.В результате указатель имеет недопустимое значение, а программа имеет неопределенное поведение, поскольку указанная переменная не активна после выхода из функции.Его память может быть перезаписана, например, вызовом printf
.
Чтобы заставить вашу программу работать, определите переменную static
.Например
int * add( const int *x, const int *y )
{
static int c;
c = *x + *y;
return &c;
}