C语言学习—函数指针
2015-10-20 00:00
381 查看
摘要: 函数指针定义,函数回调,动态排序,函数返回值是函数指针
一.函数指针定义
函数地址:函数名和数组名一样是地址.
函数指针定义
函数指针使用
二.回调函数
函数指针做参数
函数调用
三.动态排序
排序
int 数组动态排序
四.函数返回值是函数指针
返回值为函数指针
数据结构
查找对应函数
调用返回的函数
五.练习代码
一.函数指针定义
函数地址:函数名和数组名一样是地址.
int maxValue(int a, int b) { return a > b ? a : b; } //maxValue是函数名,即是函数地址
函数指针定义
int maxValue(int a, int b) int (*p)(int ,int ) = NULL; //函数指针定义,p是变量,其它是类型
函数指针使用
p = maxValue;//赋值函数名 int m = p(3, 5);//指针可以当函数用
二.回调函数
函数指针做参数
int getValue(int a, int b, int (*p)(int , int)); //getValue是函数名,函数指针做getValue函数的参数
函数调用
int value = getValue(3, 5, maxValue) //getValue执行过程中在调用(回调) maxValue
三.动态排序
排序
void sortArray(int * arr, int count){ for(int i = 0; i < count - 1; i ++){ for(int j = 0;j < count - i - 1; j ++){ if(条件) { 交换; } } } //注意:决定排序方式的重要语句封装成函数后在此回调
int 数组动态排序
typedef BOOL (*PFUN) (int , int); //为函数指针类型起别名为PFUN void sortArray(int *arr, int count, PFUN p); //动态排序函数声明
四.函数返回值是函数指针
返回值为函数指针
PFUN getFunctionByName(char * name); //通过功能名称查找对应的函数
数据结构
typedef struct nameFunctionPair { char name[30]; PFUN function; }NameFunctionPair;
查找对应函数
PFUN fun = NULL; fun = getFunctionByName("min");
调用返回的函数
int value = fun(3, 5); //使用返回的函数指针调用函数,完成动态调用
五.练习代码
#include<stdio.h> void printfArray(int *arr, int count) { for (int i = 0; i < count; i ++) { printf("%2d ", arr[i]); } printf("\n"); } // 1.(***)随机生成一个10个元素的数组,找到3的倍数,并将其值修改成0.(注意:修改数值使用回掉函数处理) void changeValue(int *value) { if (0 == *value % 3) { *value = 0; } } void getValue(int *arr, int count, void (*p)(int *)) { for (int i = 0; i < count; i ++) { p(arr + i); } } // 2. (***)有两个10个元素的数组,分别为A和B,编程实现相同位置的元素, // 如果B的元素小于A的元素进行数值交换:(使用回调函数实现) void changeV(int *number1, int *number2) { if (*number1 < *number2) { int temp = *number1; *number1 = *number2; *number2 = temp; } } void changeArrayElementValue(int *arr1, int *arr2, int count, void (*p)(int *, int *)) { for (int i = 0; i < count; i ++) { p(arr1 + i, arr2 + i); } } int main(int argc, const char * argv[]) { //题1 int arr[10] = {0}; for (int i = 0; i < 10; i ++) { arr[i] = arc4random() % 20 + 1; } printfArray(arr, 10); getValue(arr, 10, changeValue); printfArray(arr, 10); //题2 int myarr1[10] = {0}; int myarr2[10] = {0}; for (int i = 0; i < 10; i ++) { myarr1[i] = arc4random() % 90 + 1; myarr2[i] = arc4random() % 90 + 1; } printf("\n"); printfArray(myarr1, 10); printfArray(myarr2, 10); printf("\n"); changeArrayElementValue(myarr1, myarr2, 10, changeV); printfArray(myarr1, 10); printfArray(myarr2, 10); return 0; }
相关文章推荐
- C12_函数回调(函数指针中的内容)
- Javascript 使用回调函数注意事项
- 平衡二叉树的构建 用函数回调来扩展程序 c语言实现
- Java回调接口的理解
- Spirng Aware接口实现
- Android程序员学PHP开发(24)-数组操作相关函数(2)回调函数篇-PhpStorm
- 函数回调机制、异步函数回调机制图例详解
- 使用继承或接口实现模板方法的方式与函数回调的感悟
- Java 是如何利用接口避免函数回调的方法
- C语言面试题整理(来自百度文库)
- C++中虚函数表的介绍
- Win7用VC++6.0出现MFCO42D.DLL丢失
- poco c++框架:本质概述
- 关键字static在c语言下的理解
- 字符串判等
- c++以POST方式向网页提交数据流
- 算法练习之memmove函数C++实现,atoi,itoa函数实现
- C语言求两个整数最大值
- c++11特性之Lambda表达式
- c++11特性之Lambda表达式