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.
*/