What are Jump Tables in C?

This C Tutorial Explains Jump Tables in C with Examples.app

Let’s consider another application of pointer-to-functions, Jump tables! A jump table is a special array of pointer-to-functions. Since, this is an array, and as we know that all array elements must be of same type, therefore, it requires that all functions must be of same type and all take same number and same type of parameters. Further, this technique can be used where different tasks could be represented by consecutive integers beginning with zero.ide

The another trick is to make sure that all function prototypes appear before jump table declaration. First step to create a jump table is to declare and initialize the jump table. For example,ui

/* function prototypes */int add(int, int);int sub(int, int);int mul(int, int);int divide(int, int); /*jumptable declared and initialized */int (*diff_oper[])(int, int) = {add, sub, mul, divide};

Then, call the operation in jumptable, providing values to arguments,this

result = diff_oper[(operator)](op1, op2);spa

/* jumptables.c -- program shows how jumptable is used to perform basic * calculator functions */#include <stdio.h> #define ADD 0#define SUB 1#define MUL 2#define DIV 3 int add(int, int);int sub(int, int);int mul(int, int);int divide(int, int); int main(void){ int op1, op2; int result; char operator;  /*jumptable declared and initialized */ int (*diff_oper[])(int, int) = {add, sub, mul, divide};  puts("**Calculator Application**");  result = diff_oper[(ADD)](50, 20); printf("ADD of %d and %d is: %d\n", 50, 20, result);  result = diff_oper[(SUB)](50, 20); printf("SUB of %d and %d is: %d\n", 50, 20, result); result = diff_oper[(MUL)](50, 20); printf("MUL of %d and %d is: %d\n", 50, 20, result);  result = diff_oper[(DIV)](50, 20); printf("DIV of %d and %d is: %d\n", 50, 20, result);  return 0; } int add(int a, int b){ return a + b;} int sub(int a, int b){ return a - b;} int mul(int a, int b){ return a * b;} int divide(int a, int b){ return a / b;}

Output turns out as,prototype

**Calculator Application**ADD of 50 and 20 is: 70SUB of 50 and 20 is: 30MUL of 50 and 20 is: 1000DIV of 50 and 20 is: 2

How about if u need to perform some 50, 100 different operations. Jump table is wonderful, then! If you think you can do the same job using switch statement, of course, you can. But switch statement, then, would go very large.code

Notice that above program could be modified to make more interacting one. So, wouldn’t you like to try?orm

相關文章
相關標籤/搜索