function pointers in c, dereferencing.

I have a function pointer to calculate addition, substraction, etc for 2 inputed arguments and 1 inputed operation. It works fine when the code return the indexed function pointer (with the inputed index) function pointer with both inputed arguments. but when I initialize a variable with as value this indexed f.p. i. , the result is an address, when I try to dereference this i.f.p. the result is -11.
I don't understand why. Can someone explain me why?

 #include <stdio.h>

//Compiler version gcc  6.3.0
/*On declare 4 fonctions*/
int ad (int num1, int num2);
int sub (int num1, int num2);
int mul (int num1, int num2);
int div (int num1, int num2);

int main()
{
     int chif, num1, num2;
     int(*op[4])(int num1, int num2);
     op[0]=ad;
     op[1]=sub;
     op[2]=mul;
     op[3]=div;

     printf("Choisissez deux nombres separes par enter\n");
     scanf("%d%d", &num1, &num2);
     printf("choisissez un chiffre entre 0 et 3 pour +-*/ \n");
     scanf("%d", &chif);

     printf("le reultat est %d\n", op[chif](num1, num2));
     return 0;
}

int ad (int x, int y)
{
     return (x+y);
}
int sub (int x, int y)
{
     return(x-y);
}
int mul (int x, int y)
{
     return(x*y);
}
int div (int x, int y)
{
     return(x/y);
}

/*
Outputs
Choisissez deux nombres separes par enter
1
2
choisissez un chiffre entre 0 et 3 pour +-*/ 
0
le reultat est 3

Process finished.
*/
#include <stdio.h>

//Compiler version gcc  6.3.0
/*On declare 4 fonctions*/
int ad (int num1, int num2);
int sub (int num1, int num2);
int mul (int num1, int num2);
int div (int num1, int num2);

int main()
{
     int chif, num1, num2;
     int(*op[4])(int num1, int num2);
     op[0]=ad;
     op[1]=sub;
     op[2]=mul;
     op[3]=div;
      int result=op[chif](num1, num2);

     printf("Choisissez deux nombres separes par enter\n");
     scanf("%d%d", &num1, &num2);
     printf("choisissez un chiffre entre 0 et 3 pour +-*/ \n");
     scanf("%d", &chif);

     printf("le reultat est %d\n", result);
     return 0;
}

int ad (int x, int y)
{
     return (x+y);
}
int sub (int x, int y)
{
     return(x-y);
}
int mul (int x, int y)
{
     return(x*y);
}
int div (int x, int y)
{
     return(x/y);
}
/*Outputs
Choisissez deux nombres separes par enter
1
2
choisissez un chiffre entre 0 et 3 pour +-*/ 
0
le reultat est -1931796686

Process finished.
*/