#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>int add(int x, int y)
{
return x + y;
}
void print1(char* str)
{
printf("%s",str);
}
int main()
{
//理解函数指针
int a = 10;
int b = 20;
char ch[] = "string";
int ret=add(a, b);
printf("%d",ret);//正常方法
//使用函数指针,函数名 或者 &函数名 都表示函数的地址
int(*p)(int, int)=add;// p为函数指针
printf("%d", (*p)(a,b));//使用:*p对函数指针解引用得到函数名,然后使用
void(*pc)(char*) = print1;// pc为函数指针
(*pc)(ch);
return 0;
}
在对函数指针使用时有以下写法:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>int add(int x, int y)
{
return x + y;
}
int main()
{
int(*p)(int, int) = add;
printf("%d\n", (*p)(3, 4));
printf("%d\n", p(3, 4));
printf("%d\n", (***p)(3, 4));
return 0;
}
运行结果如下:
发现无论p前面有几个*都得到一样的结论!
《C陷阱和缺陷》 :
void( *signal( int, void(*)(int) ) )(int);//1 看起来太复杂用typedef关键字重定义下
typedef unsigned int uint;//将unsigned int 定义为uint
// typedef void(*)(int) vpint;//这种方法是错误的!!!!
typedef void(*vpint)(int);//正确方法
//于是1处复杂的可写为
vpint( signal(int, vpint) );