一:函数指针关键点:
例子:int(*p)( int a ,int b);
1.如何表示指针: *
2.如何知道是函数:()
3.函数指针是专用的,格式要求很强(参数类型,个数,返回值),就像数组指针一样
.这样是错误的:
int *p( int a ,int b); //这代表返回值是一个 int * 型
二:如何定义函数指针并且赋值
如果被调用的函数是:
int dis(int a,intb){
return a+b;
}
则
定义函数指针的时候,将上面的函数int dis(int a ,int b)拷贝到main函数中,并将dis换成新的名字如(*p),这样做的好处是不容易出错。
int (*p)(int a,intb);
赋值:函数名就是地址,就像数组一样,数组名就是地址
p= dis;
.
三:调用
p(1,2); 直接通过指针名字+()
(*p)(1.2); 取内容(*指针函数)+()
.
四:具体代码如下,无类型和有类型(只是为了好理解和阅读,两者没有区别)
1.1:无类型
#include <stdio.h>
#include <stdlib.h>
void display()
{
printf("指针函数初入门\n");
}
int main()
{
//1.定义指针函数
void (*p)();
//2.给函数指针赋值
p = display; //函数名就是地址,就像数组一样,数组名就是地址
//3.如何通过函数指针调用函数
p(); //直接通过指针名字+()
(*p)(); //取内容(*指针函数)+()
system("pause");
return 0;
}
=================================
1.2:有类型
#include <stdio.h>
#include <stdlib.h>
int dis(int a,int b){
return a+b;
}
int main()
{
int ret1;
int ret2;
//1.定义函数指针
int (*p2)(int a,int b);
//2.给函数指针赋值
p2 = dis;
//3.函数指针的调用
ret1 = p2(1,2);
ret2 = (*p2)(2,3);
printf("%d\n %d\n",ret1,ret2);
system("pause");
return 0;
}