用了那么久的C#,回头再看C语言时,好多东西希望还是想学的细一点。
今天看到typedef定义指针函数时,感觉和直接用指针函数很相似,然后就写了个例子验证了一下。
下面的是例子
直接用指针函数,如果需要指向不同的函数时需要来回的赋值,而使用typedef时只是相当于定义了一个该类型的函数,赋值一次,之后就可以重复使用了。当指针函数作为函数参数时也可以简化一些代码。
#include//using namespace std; // //int max(int a, int b); //int add(int a, int b); #include typedef char(*PTR_TO_ARR)[30]; typedef int(*PTR_TO_FUNC)(int, int); int(*PTR_TO_FUNC2)(int, int); int max(int a, int b) { return a > b ? a : b; } int min(int a, int b) { return a < b ? a : b; } int add(int a, int b) { return a + b; } int fun(PTR_TO_FUNC fun2, int a, int b) { return fun2(a, b); } int fun2(int fun22(int,int), int a, int b) { return fun22(a, b); } int fun3(int PTR_TO_FUNC2(int, int), int a, int b) { return PTR_TO_FUNC2(a, b); } char str[3][30] = { "http://c.biancheng.net", "C语言中文网", "C-Language" }; int main() { PTR_TO_ARR parr = str; PTR_TO_FUNC pfunc = max; PTR_TO_FUNC pfunMin = min; printf("max: %dn", (*pfunc)(10, 20)); printf("mix: %dn", (*pfunMin)(10, 20)); PTR_TO_FUNC2 = max; printf("max: %dn", PTR_TO_FUNC2(10, 20)); PTR_TO_FUNC2 = min; printf("mix: %dn", PTR_TO_FUNC2(10, 20)); printf("mix: %dn", fun(min, 10, 20)); printf("mix: %dn", fun2(min, 10, 20)); printf("mix: %dn", fun3(min, 10, 20)); int i; for (i = 0; i < 3; i++) { printf("str[%d]: %sn", i, *(parr + i)); } system("pause"); return 0; }



