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