C语言指针3-函数指针
来源:互联网 发布:自动斗地主软件 编辑:程序博客网 时间:2024/05/16 01:45
函数指针是一个指向函数的指针,可以如下定义:
int (*pfunc)(int, int);
对这条语句的解释是:
先解释(*pfunc),所以pfunc首先是一个指针;
再解释(int, int),pfunc指向一个函数,该函数的参数有两个,都是整形;
最后是返回值。
因此,如果定义了一个函数int max(int a, int b),我们就可以这样使用函数指针了:
pfunc = max; // 注意二者的返回类型,需要一致
函数指针与指针函数是不一样的,后者是一个函数,其返回值是一个指针,比如char * index( const char *s, int c);
int (*max)(int a, int b); // 函数指针
int *max(int a, int b); // 指针函数
下面给出函数指针使用的一些代码:
(1)
int min(int a, int b){return a > b ? b : a;}int max(int a, int b){return a > b ? a : b;}int main(){int a = 12;int b = 34;int (*pfunc)(int, int);// 定义一个函数指针pfunc = min;printf("min=%d/n", pfunc(a, b));pfunc = max;printf("max=%d/n", pfunc(a, b));int (*p[2])(int, int);p[0] = min;p[1] = max;printf("min=%d/n", p[0](a, b));printf("max=%d/n", p[1](a, b));#define abc minprintf("min=%d/n", abc(a, b));#define efg maxprintf("max=%d/n", efg(a, b));return 0;}
int (*p[2])(int, int)是一个函数指针数组。函数指针感觉和#define相似,见上面的代码中的#define部分。
(2)
typedef struct point{double x;double y;}Point;int cmp1(void *a, void *b){int *c = (int *)a;int *d = (int *)b;return *c - *d;}int cmp2(void *a, void *b){double *c = (double *)a;double *d = (double *)b;double e = *c - *d;if (e > 0)return 1;else if (e < 0)return -1;else return 0;}int cmp3(void *a, void *b){return strcmp((char *)a, (char *)b);}int cmp4(void *a, void *b){Point *c = (Point *)a;Point *d = (Point *)b;double e = c->x - d->x;if (e > 0)return 1;else if (e < 0)return -1;else return 0;}void test(void *a, int n, int size, int (*p)(void *, void *)){void *p1 = a;void *p2 = a + size;// do somethingprintf("%d/n", p(p1, p2));}int main(){int c[2];c[0] = 12;c[1] = 34;test(c, 2, sizeof(int), cmp1);double d[2];d[0] = 1.2;d[1] = 3.4;test(d, 2, sizeof(double), cmp2);char s[2][16] = {"xiao", "she"};test(s, 2, sizeof(s[0]), cmp3);Point pt[2];pt[0].x = 1.8;pt[0].y = 1.3;pt[1].x = 1.4;pt[1].y = 1.5;test(pt, 2, sizeof(Point), cmp4);return 0;}例子(2)中的test函数其中一个参数是一个函数指针,分别调用不同的比较函数,以处理不同类型的数据。
和qsort是不是很相似?
- C语言指针3-函数指针
- c语言函数指针
- C语言函数指针
- c语言 函数指针
- C语言函数指针
- C语言 ---- 指针函数
- C语言函数指针
- C语言函数指针
- C语言函数指针
- c语言函数指针
- C语言函数指针
- C语言函数指针
- c语言函数指针
- C语言--函数指针
- C语言函数指针
- C语言函数指针
- C语言-函数指针
- C语言----函数指针
- KB001: 兼容性问题与浏览器的内核及渲染模式
- hibernate配置后,进行测试出现如下问题,请高手指点
- 用C#实现的十进制和十六进制的转换函数
- vc CString 与Ip之间的转化
- HAVING和WHERE的区别
- C语言指针3-函数指针
- 几行代码 轻松实现在窗体上按住鼠标实现拖动窗体
- JIRA
- 用代码说话之-----用电磁炉炒菜时,想到的设计模式(命令模式和单例模式)
- 程序员放宽你的眼界
- Android中ViewGroup等容器控件的使用
- C语言运算符优先级详细列表
- 请问示波器中的trigger是干什么用的
- Android Activity和Intent