請給我一些跳轉表的使用示例。我看到的維基百科這個例子:跳轉表示例C
#include <stdio.h>
#include <stdlib.h>
typedef void (*Handler)(void); /* A pointer to a handler function */
/* The functions */
void func3 (void) { printf("3\n"); }
void func2 (void) { printf("2\n"); }
void func1 (void) { printf("1\n"); }
void func0 (void) { printf("0\n"); }
Handler jump_table[4] = {func0, func1, func2, func3};
int main (int argc, char **argv) {
int value;
/* Convert first argument to 0-3 integer (Hash) */
value = atoi(argv[1]) % 4;
if (value < 0) {
value *= -1;
}
/* Call appropriate function (func0 thru func3) */
jump_table[value]();
}
但我不知道是否有調用該函數,而不是使用索引顯示,在上述情況下,它是jump_table[value]();
我想要什麼的另一種方式要實現的是,而不是使用索引是有辦法使用函數本身的名稱。
例如,假設我們有一個結構體中的所有函數指針。
typedef struct _funcptrs
{
void func1();
void func2();
} funcptrs;
,現在當我要調用的功能,我可以做這樣的事情funcptrs.func1()
?
「使用索引是否有一種方法可以使用函數本身的名稱」您要查找的是更高級別的語言還是哈希表。散列表將是字符串 - >函數指針。 – Corbin 2012-03-29 19:36:20
如果你想用函數本身的名字來調用,那麼爲什麼你首先需要一個跳轉表? – 2012-03-29 19:37:15
我沒有真正讀過你的最後一個例子,現在我剛剛做了,我相信@PavanManjunath有一點。你究竟想要做什麼?我假設你想要一個char *並根據它調用一個函數。就像在PHP中你可以做$ func =「strtolower」; echo $ func('CORBIN');. – Corbin 2012-03-29 19:39:57