分享

一看就会的C语言笔记——指针函数、函数指针、回调函数

 静幻堂 2018-09-26
1991不再来 2018-09-21 14:17:41
一看就会的C语言笔记——指针函数、函数指针、回调函数

//指针函数:指针函数本质是一个函数,只不过返回值为某一类型的指针(地址值)。

//函数返回值必须用同类型的变量来接受,也就是说,指针函数的返回值必须赋值给同类型的指针变量。

//指针函数的定义格式:类型名 *函数名(函数参数列表);(其中*号靠左靠右都行,比如int* sum(int a,int b);或者int *sum(int a,int b);)

//函数指针:函数指针本质是一个指针,只不过这个指针指向一个函数。

//常见的函数都有其入口,比如main()函数是整个程序的入口,我们调用的其他函数都有其特定的入口,正如我们可以通过地址找到相应的变量一样,我们也可以通过地址找到相应的函数。而这个存储着函数地址的指针就是函数指针。

//换言之,我们所说的指针变量通畅指向一个整形、字符型、或者数组等变量,而函数指针指向的是函数。

//正如我们可以通过指针访问相应的变量,函数指针也可以像函数一样用于调用函数、传递参数。

//函数指针定义格式:类型名 (*函数名)(函数参数列表)

//我们可以发现,这里的"*函数名"是用括号括起来的

//

//回调函数:函数指针作为某个函数的参数

//我们知道,函数指针变量也是一个变量,那么作为变量当然也可以当做参数来使用。

//为了理解回调函数,我们先要搞清楚回调函数有什么作用。比如老板、经理、你三个角色。老板通常是规则的指定着,经理按照规则指派相应的人去做事,而你就是任务的具体执行者。

//当老板要求经理去做一个事情,那么老板就是主调函数,经理就是回调函数,你按照规则去处理事情就是相应回调函数。你处理的结果会反馈给经理,经理拿着你的结果再反馈给老板。老板就可以使用这个结果去做相关的事情了。

//在这个环节中,你只需要按照指定的规则去做事,而经理不需要考虑事情是怎么做的,他只需要把相应的事情分配给对应的人去处理即可,然后将获取的结果反馈给老板。如果规则有变,只需要对应的员工知道哪里改变了,而经理不需要关注这些细节。

//以上就是回调函数

例如:

1、指针函数

#include <stdio.h>
int *sum(int a,int b);
int main()
{
int a=1;
int b=2;
int *P=NULL;
p=sum(a,b);
printf("%d",*p);
return 0;
}
int *sum(int a,int b)
{
static int sum=0;
sum=a+b;
return ∑
}

2、函数指针

#include <stdio.h>

int max(int x, int y)
{
return x > y ? x : y;
}

int main(void)
{
/* p 是函数指针 */
int (* p)(int, int) = & max; // &可以省略
int a, b, c, d;

printf("请输入三个数字:");
scanf("%d %d %d", & a, & b, & c);

/* 与直接调用函数等价,d = max(max(a, b), c) */
d = p(p(a, b), c);

printf("最大的数字是: %d ", d);

return 0;
}

3、回调函数

#include <stdio.h>

int add_ret() ;

int add(int a , int b , int (*add_value)())
{
return (*add_value)(a,b);
}

int main(void)
{
int sum = add(3,4,add_ret);
printf("sum:%d ",sum);
return 0 ;
}

int add_ret(int a , int b)
{
return a+b ;
}

最后:

1、指针函数不同于函数指针, int (*f)(int a);或者char (*f1)(void);

2、函数指针声明为指针,它与变量指针不同之处是,它不是指向变量,而是指向函数。所以一定要注意。

3、函数指针有两个用途:调用函数和做函数的参数.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多