主题四 指针和数组(下)----28.函数与指针分析
来源:互联网 发布:天戏网络 编辑:程序博客网 时间:2024/06/03 15:30
函数类型
C语言中的函数也有自己的类型。
函数的类型由返回值,参数类型(还有参数顺序)和参数个数共同决定。
例: int add(int i,int j)的类型为int(int,int)
C语言中通过typedef为函数类型重命名,typedef type name(parameter list)
例:typedef int f(int,int); typedef void p(int);
函数指针
函数指针用于指向一个函数
函数名是执行函数体的入口地址
可通过函数类型定义函数指针:FuncType* pointer;或者直接定义;Functype(*pointer)(parameter list);其中pointer为函数指针变量名,type为指向函数的返回值的类型,parameter list为指向函数的参数类型列表。
例:函数指针的本质与使用
#include <stdio.h>typedef int(FUNC)(int);int test(int i){ return i * i;}void f(){ printf("Call f()...\n");}int main(){ FUNC* pt = test; void(*pf)() = &f; pf(); (*pf)(); printf("Function pointer call: %d\n", pt(2));}
回调函数
回调函数是利用函数指针实现的一种调用机制,来解决只有在执行到某阶段时才知道应该调用那个函数的实际问题。
回调函数原理:
调用者不知道具体事件发生的时候需要调用的具体函数
被调用者不知道自己何时被调用,只知道被调用后需要完成的任务
当具体事件发生时,调用者通过函数指针调用具体函数
回调机制将调用者和被调用函数分开,两者互不依赖,更加灵活,且适合模块化接口化编程
例:回调函数实例
#include <stdio.h>typedef int(*FUNCTION)(int);int g(int n, FUNCTION f){ int i = 0; int ret = 0; for(i=1; i<=n; i++) { ret += i*f(i); } return ret;}int f1(int x){ return x + 1;}int f2(int x){ return 2*x - 1;}int f3(int x){ return -x; }int main(){ printf("x * f1(x): %d\n", g(3, f1)); printf("x * f2(x): %d\n", g(3, f2)); printf("x * f3(x): %d\n", g(3, f3));}
复杂指针函数的阅读技巧---右左法则
1.从最里层的圆括号中未定义的标识符看起
2.首先往右看,再往左看
3.当遇到圆括号或者方括号的时候就可以确认部分类型
4.对剩余未确认部分重复2,3步骤,直到阅读结束。
例:解读以下复杂指针
#include <stdio.h>int main(){ int (*p2)(int*, int (*f)(int*)); int (*p3[5])(int*); int (*(*p4)[5])(int*); int (*(*p5)(int*))[5];}//int (*p3[5])(int*)<===>p3[5]数组<===>int (*)(int *)<===>*p3[5]是指针数组,大小为5<===>int ()(int *)每个数组元素是int(int*)的函数//int (*(*p4)[5])(int*)<===>(*p4)是指针<===>int(*[5])(int*)<===>p4是数组指针,指向一个5个大小的数组
//<===>int(*)(int*)<===>每个数组元素是指针<===>int()(int*)<===>每个元素指针指向一个类型为int()(int*)的函数
阅读全文
0 0
- 主题四 指针和数组(下)----28.函数与指针分析
- 主题四 指针和数组(下)----25.指针数组与数组指针分析
- 主题四 指针和数组(上)----24.数组与指针分析
- 主题四 指针和数组(下)----26.多维数组与多维指针
- 主题四 指针和数组(下)----27.数组参数和指针参数
- 主题四 指针和数组(上)----22.数组基础
- 主题四 指针和数组(上)----21.指针的基础
- 指针知识(四) 数组与指针、动态分配内存、指针函数与函数指针
- 指针数组与数组指针 和 函数指针与函数指针数组
- C程序设计语言--指针与数组(二) 指针数组 数组指针 函数指针 指针函数
- 函数指针、指针数组与数组指针
- 专题四-指针和数组下
- 指针数组 和 数组指针分析 main函数的参数
- 函数指针,指针数组和数组指针
- 数组指针,指针数组和函数指针
- 数组指针与指针数组 函数指针与指针函数
- 数组指针与指针数组 函数指针与指针函数
- 指针数组与数组指针、指针函数与函数指针
- 彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑
- 输入流输出流问题
- 手把手教你使用IDEA开发工具创建一个Maven项目
- 面试题25:二叉树中和为某一值的路径
- 输入两个日期得出相差的月份
- 主题四 指针和数组(下)----28.函数与指针分析
- 解决端口占用问题
- 我的网络编程学习之路——基本的TCP套接字API
- matlab read excel出错
- 在分布式数据库中CAP原理CAP+BASE以及分布式和集群的区别
- mysql slave创建:mysqldump参数--master-data
- python科学计算库numpy的使用
- 关于C语言宏定义define的用法探究
- 队列的基础操作