這裏,函數指針是度身訂造,以解決這一類型的挑戰。您將定義您的正常功能foo1
,foo2
,以及您可能需要的更多功能。然後,您使用語法return type (*fpointername)(arg, list);
定義function pointer
您的arg
,list
參數只是要分配的功能的type
。 (例如,如果你的職能void foo1 (int a, char b)
那麼你聲明你的函數指針void (*fpointername)(int, char);
(變量名中FN指針定義中省略)
下面是一個簡單的程序,說明了這一點放一個評論,如果您有任何問題:。
#include <stdio.h>
/* 3 void functions, one of which will become foo
* dependeing on the outcome of the switch statement
*/
void foo1 (char c) {
printf ("\n %s(%c)\n\n", __func__, c);
}
void foo2 (char c) {
printf ("\n %s(%c)\n\n", __func__, c);
}
void foodefault (char c) {
printf ("\n %s(%c)\n\n", __func__, c);
printf (" Usage: program char [a->foo1, b->foo2, other->foodefault]\n\n");
}
/* simple program passes argument to switch
* statement which assigns function to function
* pointer 'foo()' based on switch criteria.
*/
int main (int argc, char **argv) {
void (*foo)(char) = NULL; /* function pointer initialized to NULL */
char x = (argc > 1) ? *argv[1] : 'c'; /* set 'x' value depending on argv[1] */
switch (x) /* switch on input to determine foo() */
{
case 'a' : /* input 'a' */
foo = &foo1; /* assign foo as foo1 */
break;
case 'b' : /* input 'b' */
foo = &foo2; /* assign foo as foo2 */
break;
default : /* default case assign foo foodefault */
foo = &foodefault;
}
foo (x); /* call function foo(x) */
return 0;
}
輸出:
$ ./bin/foofn
foodefault(c)
Usage: program char [a->foo1, b->foo2, other->foodefault]
$ ./bin/foofn a
foo1(a)
$ ./bin/foofn b
foo2(b)
$ ./bin/foofn d
foodefault(d)
Usage: program char [a->foo1, b->foo2, other->foodefault]
沒有太大的不同,但你可以只創建一個單一的指針到函數的變量,並在switch語句外部給它分配你的while循環。沒有必要創建一個指針數組。 – happydave 2014-10-27 03:09:43