C语言--函数指针
来源:互联网 发布:弹幕源码下载 编辑:程序博客网 时间:2024/05/22 12:14
#import <Foundation/Foundation.h>#include "Function.h"int main(int argc, const char * argv[]){// printf("%d\n",sum(10, 8));//// int (*p)(int x,int y) = sum;// //函数指针类型 int (*)(int x,int y)// //描述: 指向 返回值为 int 两个int参数 的 指针类型// //函数指针变量: p// //初始值: sum// // printf("%d", p(8,9));// // // void (*q)() = printHello;// q(); // char str[10] = {0};// printf("请输入 maxValue 或者 sum:");// scanf("%s",str);// // typedef int (*FP)(int x,int y);// //FP是新类型int (*)(int x,int y)是旧类型// //此时此刻 FP 就是int (*)(int x,int y)// //int (*p)(int x,int y) = NULL;// FP p = NULL;// if (strcmp(str, "maxValue") == 0) {// p = maxValue;// }else if(strcmp(str, "sum")==0){// p = sum;// }// printf("%d",p(3,5)); // printf("%d\n",getValue(10, 8, minValue));// printf("%d\n",getValue(10, 8, maxValue)); Student stus[3] = { {"haojianming",89.95,45,1}, {"yaozhaodi",91,13,0.5}, {"dengyongjun",99.99,37,0.3} }; //printArray(stus, 3); sortArray(stus, 3,compareByName ); printArray(stus, 3); // printStudents(stus, 3,"(高富帅)",test); return 0;}
#import "Function.h"//函数声明:声明我是一个什么函数//求两个数的和//函数的类型:int (int x,int y)//即:我是一个 返回值为整型,有两个整型参数的函数.//函数名为 sumint sum(int x,int y);int minValue(int x,int y);int maxValue(int x,int y);int getValue(int x,int y, int(*p)(int a,int b));int max2Value(int x,float y);//int minValue(int x,int y,int z);void printHello();struct Student{ char name[30]; float score; int age; float attendance;};typedef struct Student Student;//比较两个学生的年龄大小BOOL compareByAge(Student s1,Student s2);//比较两个学生的分数大小BOOL compareByScore(Student s1,Student s2);//比较两个学生的出勤率大小BOOL compareByAttendance(Student s1,Student s2);//比较两个学生的姓名大小BOOL compareByName(Student s1,Student s2);typedef BOOL (*CFP)(Student s1,Student s2);void sortArray(Student stus[],int count,CFP p);void printArray(Student stus[],int count);void mark(char originStr[],char markStr[]);void replace(char originStr[],char markStr[]);void test(char originStr[],char markStr[]);typedef void (*PPP)(char originStr[],char markStr[]);void printStudents(Student stus[],int count,char str[],PPP p);
#import "Function.m"int sum(int x,int y){ return x + y;}int maxValue(int x,int y){ return x > y ? x : y;}int minValue(int x,int y){ return x < y ? x : y;}int getValue(int x,int y, int(*p)(int a,int b)){ return p(x,y);}void printHello(){ printf("Hello\n");}void mark(char originStr[],char markStr[]){ strcat(originStr,markStr);}void test(char originStr[],char markStr[]){ }void replace(char originStr[],char markStr[]){ strcpy(originStr, markStr);}void printStudents(Student stus[],int count,char str[],PPP p){ for (int i = 0; i < count; i++) { if (stus[i].score >= 90) { p(stus[i].name,str); printf("%s %.2f\n",stus[i].name,stus[i].score); } }}BOOL compareByAttendance(Student s1,Student s2){ return s1.attendance > s2.attendance ? YES : NO;}BOOL compareByName(Student s1,Student s2){ return strcmp(s1.name, s2.name) > 0 ? YES : NO;}BOOL compareByScore(Student s1,Student s2){ return (s1.score > s2.score) ? YES : NO;}BOOL compareByAge(Student s1,Student s2){ return (s1.age > s2.age) ? YES : NO;}void sortArray(Student stus[],int count,CFP p){ for (int i = 0; i < count - 1; i++) { for(int j = 0; j < count - 1 - i;j++){ //按年龄排 stus[j].age > stus[j+1].age //按分数排 stus[j].score > stus[j+1].score //按出勤率 stus[j].attendance > stus[j+1].attendance if (p(stus[j],stus[j+1])) { Student temp = stus[j]; stus[j] = stus[j+1]; stus[j+1] = temp; } } }}void printArray(Student stus[],int count){ for (int i = 0; i < count; i++){ printf("%s %f %d % f\n",stus[i].name,stus[i].score,stus[i].age,stus[i].attendance); }}
#import <Foundation/Foundation.h>#import "GetValue.h"int main(int argc, const char * argv[]){ /** * 建立一张映射表,存储 字符串-函数名 对儿 函数调用时,检查给定的字符串是否在映射表中,如果在,取出对应的函数名 使用取出的函数名,调用函数,完成结果. */ printf("%d\n",getValue(8, 12, "mul")); return 0;}
#import "GetValue.h"typedef int (*PFUN)(int x,int y);//新类型 PFUN 旧类型int (*)(int x,int y)//映射表是一个 结构体数组,为了建立映射表,我们先建立一个结构体.此结构体包含 一个字符串 和一个函数指针struct NameFunctionPair { char name[30]; //字符串 PFUN function; //函数指针};typedef struct NameFunctionPair NameFunctionPair;//求2个数的最大值int maxValue(int x,int y);//求2个数的最小值int minValue(int x,int y);int sum(int x,int y);int minus(int x,int y);int multiple(int x,int y);int divide(int x,int y);int gcd(int x,int y);//最大公约数int gbs(int x,int y);//最小公倍数//根据字符串 获取 函数名PFUN functionOfName(char *name);//三个参数 ,前2个是参与运算的数字,第三个参数用于查询映射表//返回值是 运算结束后的结果,如何运算,取决于第三个参数.int getValue(int x,int y, char *name);
#import "GetValue.m"NameFunctionPair nfps[] = { {"max",maxValue}, {"min",minValue}, {"sum",sum}, {"minus",minus}, {"mul",multiple}, {"div",divide}, {"gcd",gcd}, {"gbs",gbs}};PFUN functionOfName(char *name){ for (int i = 0; i < sizeof(nfps)/sizeof(nfps[0]); i++) { if (strcmp(name, nfps[i].name) == 0){ //如果映射表里 有对应的 function, 返回这个 function return nfps[i].function; } } //如果没找到,默认求最大值 return maxValue;}int getValue(int x,int y, char *name){ PFUN fun = functionOfName(name);//根据 name 获取对应的函数 return fun(x,y);//使用选定的函数计算结果}int gbs(int x,int y){ return x * y / gcd(x, y);}int gcd(int x,int y){ while (x % y != 0) { int temp = x % y; x = y; y = temp; } return y;}int divide(int x,int y){ return x/y;}int multiple(int x,int y){ return x * y;}int minus(int x,int y){ return x - y;}int sum(int x,int y){ return x + y;}int minValue(int x,int y){ return x < y ? x : y;}int maxValue(int x,int y){ return x > y ? x : y;}
0 0
- c语言函数指针
- C语言函数指针
- c语言 函数指针
- C语言函数指针
- C语言 ---- 指针函数
- C语言函数指针
- C语言函数指针
- C语言函数指针
- c语言函数指针
- C语言函数指针
- C语言函数指针
- c语言函数指针
- C语言--函数指针
- C语言函数指针
- C语言函数指针
- C语言-函数指针
- C语言----函数指针
- c语言函数指针
- 瀑布流 图册
- java多线程例子
- github之tortoisegit常用功能使用
- 代码片-Demo 演示..
- Android应用优化(5)几种内存泄露和解决办法
- C语言--函数指针
- JRTPLIB 3.9.1
- github之tortoisegit的git did not exit cleanly (exit code 128)的解决方案
- Hadoop优化经验——来自经验丰富的工程师
- 据说这是今年高考第一篇负分滚粗作文
- 2、小论c语言递归与递推
- .Net单元测试方法
- Java 代码块(普通代码块,构造块,静态代码块)
- 3、进制转换