函数指针
来源:互联网 发布:java接口测试代码 编辑:程序博客网 时间:2024/06/05 06:28
介绍
直接上代码
#include <stdio.h>void f(void){ static int times = 0; printf("invoke %d\n", ++times);}int main(void){ void (*pf)(void) = f; printf("f = %p\n", f); printf("*f = %p\n", *f); printf("&f = %p\n\n", &f); printf("pf = %p\n", pf); printf("*pf = %p\n", *pf); f();//line 1 (*f)();//line 2 (&f)();//line 3 pf();//line 4 (*pf)();//line 5 getchar(); return 0; }
运行结果:
- f、&f、&f, 都是函数的入口地址。
- 函数的调用有5种方式,f()、(*f)()、(&f)()、pf()、(*pf)()。
- *pf对指针pf解引用,,理论上说得到的是函数名,但是编译器会把它转换成指针,见图2:00B83CDC call dword ptr [pf] 。
用途
函数指针主要有两个用途:作为参数传递给另一个函数(回调函数)、转换表(不讨论)。
回调函数:编写sort函数,它用于对任何类型的数组进行排序。
sort函数原型:void sort(void array, int count, int size, int (*comp)(void , void *));
sort.c
#include<stddef.h>#include<assert.h>static void swap(char *i, char *j, int size){ char temp; while (size-- != 0) { temp = *i; *i++ = *j; *j++ = temp; }}void sort(void *array, int count, int size, int (*comp)(void *, void *)){ char *i, *j, *last; assert(count > 0 && size > 0); last = (char *)array + size * (count - 1); for (i = array; i < last; i += size) for (j = i + size; j <= last; j += size) if (comp(i, j) > 0) swap(i, j, size);}
main.c
#include <stdio.h>void sort(void *array, int count, int size, int (*comp)(void *, void *));int comp(void *i, void *j){ int *p1 = i; int *p2 = j; return *p1 > *p2 ? 1 : *p1 < *p2 ? -1 : 0;}int main(void){ int arr[] = { 10, 9, 7, 4, 2, 1, 8, 3, 5, 6 }; sort(arr, sizeof(arr) / sizeof(int), sizeof(int), comp); for (int i = 0; i < 10; i++) printf("%d\n", arr[i]); getchar(); return 0;}
阅读全文
0 0
- 指针函数 函数指针
- 函数指针/指针函数
- 指针函数&函数指针
- 函数指针 指针函数
- 函数指针 指针函数
- 指针函数,函数指针
- 函数指针,指针函数,
- 指针函数,函数指针
- 函数指针 指针函数
- 函数指针、指针函数
- 指针函数&函数指针
- 函数指针 指针函数
- 函数指针 指针函数
- 函数指针&指针函数
- 指针函数 函数指针
- 指针函数 &函数指针
- 函数指针&指针函数
- void指针 函数指针
- (人脸识别2-6)——利用keras训练识别模型
- 贪心算法之均分纸牌
- gulp全局依赖包下载之坑
- socket編程-select學習
- poi处理单元格不同类型的取值,升级版!
- 函数指针
- Geode
- 数组基本操作
- JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
- 剖析ArrayList / 计算机程序的思维逻辑
- 欢迎使用CSDN-markdown编辑器
- Android 进阶4:Service 的一些细节
- 使用css3 background属性制作3D易拉罐效果
- wordpress图片上传问题汇总