Android 音视频入门之C入门序列(五)- 函数指针

指针类型有何用

指针也为内存地址,他在32系统中占用永远是 4个字节, 64位为8
所以用处就是在取值的时候系统知道怎么取,这就是类型规范的好处,因为是4个 固定,所以找下个只要知道偏移4就是下一个就可以

函数指针

函数本身就是指针,当我们定义了一个函数的时候他就有个内存地址,所以函数也可以当做参数传递,如下面例子

#include <stdio.h>
// 先定义下面二个方法
void add (int num1, int num2) {
	printf("num1+num2 = %d\n", num1 + num2);
}

void mins (int num1, int num2) {
	printf("num1-num2 = %d\n", num1 - num2);
}
// 再定义一个特殊的方法
void opreate(void (*method) (int,int), int num1, int num2){
// void (*method) 声明一个函数指针,可以传一个匹配的函数过来  void 返回值;  (*method) 函数名;  (int, int) 二个参数
	method(num1, num2); // 执行传进来的方法, 并把num1,和num2当做参数给传进去。
}

int main () {
	// 函数的指针在Java中类似接口回调
	// 函数本身就是一个指针
	opreate(add,10,20);
	//上面一行代码,是把方法add传进来了,刚刚好add方法方法参数也是二个Int, 然后到opreate方法里执行了method也就是add函数,并100,200传入到add方法中,也就执行了add方法
	//  输出结果: num1+num2 = 30

// 上面说了函数也指针,数组也是一样,那是不是他也有数组一样的特性也就是 add 和&add是不是一样的,答案是肯定的
printf("&add %p, add %p\n", &add , add); // &add 00F81168, add 00F81168  一样
}
函数当作参数的规范
#include <stdio.h>

void callBackMethod(char *fileName, int curdrent, int total) {
    printf("%s图片压缩的进度是: %d/%d\n", fileName, curdrent, total);
}
/**
 * 压缩方法
 * 定义函数指针: 返回值(*名称)(int , double)
 * @param fileName
 */
void compress(char *fileName, void(*callBackP)(char *, int, int)) {
    callBackP(fileName, 5, 100); // 回调给外部,压缩的进度情况
}

int mian () {
	// 规范是先定义一个函数指针出来如下 ,要不能在方法里 操作了原方法地址可能就会出问题
	void (*call) (char *, int , int);
	//然后将call 赋于地址
	call = callBackMethod;
	// 调用压缩方法
	compress("derry.png", call);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值