c 中typedef函数的用法
来源:互联网 发布:淘宝我的积分查询 编辑:程序博客网 时间:2024/05/21 20:31
- #include<stdio.h>
- //本文转自http://blog.sina.com.cn/s/blog_6d5fee120100ymu2.html
- typedef int(*FP_CALC)(int,int);
- //注意这里不是函数声明而是函数定义,它是一个地址,你可以直接输出add看看
- intadd(inta,intb)
- {
-
- }
- intsub(inta,intb)
- {
-
- }
- intmul(inta,intb)
- {
-
- }
- intdiv(inta,intb)
- {
-
- }
- //定义一个函数,参数为op,返回一个指针。该指针类型为 拥有两个int参数、
- //返回类型为int的函数指针。它的作用是根据操作符返回相应函数的地址
- FP_CALC calc_func(charop)
- {
-
-
{ -
-
-
-
-
-
-
} -
- }
- //s_calc_func为函数,它的参数是 op,
- //返回值为一个拥有两个int参数、返回类型为int 的函数指针
- int(*s_calc_func(charop)) (int,int)
- {
-
- }
- //最终用户直接调用的函数,该函数接收两个int整数,和一个算术运算符,返回两数的运算结果
- intcalc(inta,intb,charop)
- {
-
FP_CALC fp = calc_func(op); -
-
//可以断言这俩是相等的 -
-
- }
-
- void main()
- {
-
-
-
printf( -
printf( -
printf( -
printf( - }
以上讲的是函数指针,也可以这样用:
#include <stdio.h>void say_hello(const char *str){ printf("Hello %s\n", str);}int main(void){ void (*f)(const char *) = say_hello; f("Guys"); return 0;}
除了函数指针,普通函数也可以用typedef,如:
typedef int F (void);//定义函数类型F
之后可以这样声明:
F f,g;相当与声明
int f(void);
int g(void);
下面这个函数声明是错误的:
F h(void);
因为函数可以返回void
类型、标量类型、结构体、联合体,但不能返回函数类型,也不能返回数组类型。而下面这个函数声明是正确的:
F *e(void);
函数e
返回一个F*
类型的函数指针。如果给e
多套几层括号仍然表示同样的意思:
F *((e))(void);
但如果把*
号也套在括号里就不一样了:
int (*fp)(void);
这样声明了一个函数指针,而不是声明一个函数。fp
也可以这样声明:
F *fp;
顺便提下指针函数:
【指针函数】
一个函数不仅可以带回一个整型数据的值,字符类型值和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元。
int *f(x,y);
其中x,y是形式参数,f是函数名,调用后返回一个指向整型数据的地址指针。f(x,y)是函数,其值是指针。
如:char*ch();表示的就是一个返回字符型指针的函数,请看下面的例题:
【例】将字符串1(str1)复制到字符串2(str2),并输出字符串2.
#include "stdio.h"
main()
{
}
char *ch(char *str1,char *str2)
{
}
通过分析可得
函数指针是一个指向函数的指针,而指针函数只是说明他是一个返回值为指针的函数,
函数指针可以用来指向一个函数。
回调函数
如果参数是一个函数指针,调用者可以传递一个函数的地址给实现者,让实现者去调用它,这称为回调函数(CallbackFunction)。例如qsort(3)
和bsearch(3)
。
void func(void (*f)(void *),void *p);
调用者
提供一个回调函数,再提供一个准备传给回调函数的参数。
把回调函数传给参数
f
,把准备传给回调函数的参数按void*
类型传给参数p
在适当的时候根据调用者传来的函数指针
f
调用回调函数,将调用者传来的参数p
转交给回调函数,即调用f(p);
- c 中typedef函数的用法
- c中 typedef函数的用法
- c 中typedef函数的用法
- c 中typedef函数的用法
- c 中typedef函数的用法
- typedef函数指针的用法(C++)
- typedef函数指针的用法(C++)
- typedef函数指针的用法(C++)
- typedef函数指针的用法(C++)
- typedef函数指针的用法(C++)
- 转:typedef函数指针的用法(C++)
- C语言中typedef的用法(转)
- C 语言中 typedef 的用法
- C语言中typedef的用法
- c/c++中typedef的用法
- C语言中typedef的用法
- c/c++中typedef的用法
- C++typedef的用法
- php面向对象之多态
- UI组件设计:减少冗余代码--类继承关系的考量
- Android Sqlite Upgrade
- 2014年4月1日Linux学习日志--安装mysql
- (转) 更改SQLServer实例默认字符集
- c 中typedef函数的用法
- nodejs使用jquery风格环境安装
- Spring中transactionAttributes的详解
- 树莓派学习笔记——RPi.GPIO 流水灯
- 背包问题(Knapsack problem)之01
- 算法杂货铺
- excel单元格内如何换行 ?
- 有关 ORA-00604 错误的总结
- 为什么要和大家聊设计