C语言--函数指针和回调函数
来源:互联网 发布:电话线插网络 编辑:程序博客网 时间:2024/06/05 22:56
函数指针和回调函数的使用.充分体会到了指针的灵活性.
主要是掌握以下几点:1.看懂语法
2.会定义指向函数的指针,(*p)是函数指针的固定写法,小括号必不可少,函数返回值类型+(*p)+(形参)
3.掌握如何利用指针调用函数,有两种方法 1> p(); 2>(*p)();
4.会使用回调函数,用函数指针作为函数的参数,实现需求不稳定时候,程序修改起来更加便捷
例如如下的程序中第1题,如果想改变一下程序要求,将5的倍数变为0输出,可将函数指针重指向给change_3就好了,第2题如果想输出数组A的值都小于B,则将函数指针指向change_4,不需要其他修改.函数回调非常适用于被调用的函数不确定的情况.比如某些条件下指向函数A,某些情况指向函数B.又比如说动态排序.总而言之,函数指针和函数回调使程序非常灵活.
#import <Foundation/Foundation.h>
#import "Function.h"
int change_1(int a){
return (a%3) ==0 ?0: a;
}//3的倍数替换为0
int change_3(int a){
return (a%5) ==0 ?0: a;
}//5的倍数替换为0
void printArray(int a[],int count,CHANGE_1 p){
for (int i =0; i < count; i++) {
a[i] = p(a[i]);
printf("%-3d ",a[i]);
}
}
void change_2(int *p1,int *p2){
if (*p1 > *p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
}//保证前者<后者
void change_4(int *p1,int *p2){
if (*p1 < *p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
}
void printAB(int a[],int b[],int count,CHANGE_2 p){
for (int i =0; i < count; i++) {
p(&a[i], &b[i]);
}
for (int i =0 ; i < count; i++) {
printf("a[%d]:%d\t",i,a[i]);
printf("b[%d]:%d\t",i,b[i]);
printf("\n");
}
}
int main(int argc,constchar * argv[])
{//1.(***)随机生成一个 10个元素的数组,找到 3的倍数,并将其值修改成 0.(注意:修改数值使用回掉函数处理)
int a[10] = {0};
printf("处理前数组:\n");
for (int i =0; i <10 ; i++) {
a[i] =arc4random_uniform(101);
printf("%-3d ",a[i]);
}
printf("\n处理后数组:\n");
CHANGE_1 p =change_1;
int count =sizeof(a)/sizeof(int);
printArray(a, count, p);
printf("\n================================\n");
//2. (***)有两个10个元素的数组,分别为A和B,编程实现相同位置的元素,如果 B 的元素小于 A的元素进行数值交换:(使用回调函数实现)
int A[10] = {0};
int B[10] = {0};
printf("原始数组:\n");
for (int i =0; i <10 ; i++) {
A[i] =arc4random_uniform(101);
printf("a[%d]:%-3d\t",i,A[i]);
B[i] =arc4random_uniform(101);
printf("b[%d]:%-3d\t",i,B[i]);
printf("\n");
}
printf("\n改变后数组:\n");
CHANGE_2 P =change_2;
printAB(A, B,10, P);
return0;
}
运行结果:
- c语言-函数指针和回调函数
- C语言--函数指针和回调函数
- 【C语言】二级指针,函数指针,回调函数
- C语言中的回调函数(函数指针)
- 函数指针中的回调函数(C语言版本)
- C语言回调函数与函数指针
- C语言函数指针与回调函数
- 【C语言】函数指针与回调函数
- C语言函数指针之回调函数
- C语言的函数指针类型和回调函数-源码
- C语言关于回调函数和this指针探讨
- C/C++函数指针和回调函数
- C 函数指针 回调函数
- C 函数指针与回调函数
- C语言中函数指针、指针函数、回调函数的简单含义
- C语言学习笔记(21) 函数指针、回调函数及复杂指针阅读技巧
- 函数指针和回调函数浅学
- 函数指针和回调函数
- ACM中关于最大值的选取
- ReactJS读书笔记五:DOM操作
- LeetCode Valid Sudoku
- 文件输入输出(C++)
- AsyncTask错误之“IllegalStateException:cannot execute task:...(a task can be executed only once)”
- C语言--函数指针和回调函数
- CentOS 没有iptables了,怎么办?
- 截屏
- 获取view x y 坐标
- 从UTF8格式向GB2312格式转换[C源码](转)
- STM8S学习GPIO操作
- gcc在出现错误的时候停止编译 -Wfatal-errors
- response.setHeader()的用法 收藏
- 状态栏高度