Итак.. Я понимаю, что если я возьму (*ptr
) как некоторую функцию f, то
res = (*ptr)(a,b) is the same as res = f(a,b).
Итак, теперь моя проблема в том, что мне нужно читать 3 целых числа. Первые 2 - операнды, третий - оператор, например. 1 = add, 2 = subtract, 3 = multiply, 4 = divide
. Как мне это сделать без операторов if или switch.
Я думал о двух возможных решениях
создать 4 указателя и уважать каждый указатель на арифметическую операцию, но с этим мне все еще нужно выполнить какую-то проверку ввода, которая потребует операторов if или switch
На самом деле это не решение, но основная идея, вероятно, понравится. если c = оператор, то я могу как-то сделать что-то вроде res = (*ptrc)(a,b), но я не думаю, что для C есть такой синтаксис
Пример ввода
1 2 1
1 2 2
1 2 3
1 2 4
Пример вывода
3
-1
2
0
Мой код:
#include <stdio.h>
//Datatype Declarations
typedef int (*arithFuncPtr)(int, int);
//Function Prototypes
int add(int x, int y);
int main()
{
int a, b, optype, res;
arithFuncPtr ptr;
//ptr points to the function add
ptr = add;
scanf("%i %i", &a, &b);
res = (*ptr)(a, b);
printf("%i\n", res);
return 0;
}
int add(int x, int y)
{
return x+y;
}
op-1
, гдеop
— нужная вам операция, а массив указателей функций включает сложение, вычитание, умножение и деление адресов функций соответственно.) - person WhozCraig   schedule 04.09.2015