Две вещи: прежде всего помните, что массивы естественным образом распадаются на указатели на их первый элемент;И во-вторых, это станет намного проще, если вы будете использовать псевдонимы типов для типов функций.
Вооружившись этими знаниями, вы можете сделать это, например,
// Type-alias to simplify using function pointers
typedef void (*function_type)(void);
// The three tables
function_type FuncTbla[] = { &afunc1, &afunc2, &afunc3 };
function_type FuncTblb[] = { &bfunc1, &bfunc2, &bfunc3 };
function_type FuncTblc[] = { &cfunc1, &cfunc2, &cfunc3 };
// A table of pointers to the first elements of each array
function_type *AllFuncTbls[] = { FuncTbla, FuncTblb, FuncTblc };
Для вызова функции с помощью AllFuncTbls
так же просто, как
AllFuncTbls[TblNo][FuncNo]();