#include #include int doub(int); int trip(int); int half(int); void fpv_exec(int (**fpv)(int), int n); void fpvv_exec(int (***fpvv)(int), int n); void fpvvv_exec(int (****fpvvv)(int), int n); int doub(int i) { return i * 2; } int trip(int i) { return i * 3; } int half(int i) { return i / 2; } void fpv_exec(int (**fpv)(int), int n) { int i; for (i = 0; *(fpv + i) != NULL; i++) { printf("%d\n", (*(fpv + i))(n)); } } void fpvv_exec(int (***fpvv)(int), int n) { int i; for (i = 0; *(fpvv + i) != NULL; i++) { fpv_exec(*(fpvv + i), n); } } void fpvvv_exec(int (****fpvvv)(int), int n) { int i; for (i = 0; *(fpvvv + i) != NULL; i++) { fpvv_exec(*(fpvvv + i), n); } } int main(int argc, char **argv) { int (****fpvvv)(int); fpvvv = calloc(2, sizeof(int (***)(int))); fpvvv[0] = calloc(2, sizeof(int (**)(int))); fpvvv[1] = calloc(2, sizeof(int (**)(int))); fpvvv[0][0] = calloc(4, sizeof(int (*)(int))); fpvvv[0][1] = calloc(4, sizeof(int (*)(int))); fpvvv[1][0] = calloc(4, sizeof(int (*)(int))); fpvvv[1][1] = calloc(4, sizeof(int (*)(int))); fpvvv[0][0][0] = doub; fpvvv[0][0][1] = trip; fpvvv[0][0][2] = half; fpvvv[0][0][3] = NULL; fpvvv[0][1][0] = doub; fpvvv[0][1][1] = trip; fpvvv[0][1][2] = half; fpvvv[0][1][3] = NULL; fpvvv[1][0][0] = doub; fpvvv[1][0][1] = trip; fpvvv[1][0][2] = half; fpvvv[1][0][3] = NULL; fpvvv[1][1][0] = doub; fpvvv[1][1][1] = trip; fpvvv[1][1][2] = half; fpvvv[1][1][3] = NULL; for (argv++, argc--; argc; argv++, argc--) { fpvvv_exec(fpvvv, atoi(*argv)); } exit(EXIT_SUCCESS); }