C语言11 -- 函数指针

来源:互联网 发布:淘宝买家黑名单 编辑:程序博客网 时间:2024/06/14 10:28

//
// main.m
// C11- 函数指针
//
// Created by dllo on 15/7/14.
// Copyright (c) 2015年 Gaozi. All rights reserved.
//

import

import “MY FUDITION.h”

////比较两个数大小,并返回结果
//int maxValue(int a, int b){
// return a > b ? a : b;
//}
//int sumNum (int x, int y){
// return x + y;
//}
//// 1 - n 的和.
//void sum (int n){
// int sum = 0;
// for (int i = 0; i <= n; i++) {
// sum += i;
// }
// printf(“%d\n”,sum);
//}
//
//
//
//void test(int b, int c){
//
//}

int main(int argc, const char * argv[]) {

//
// printf(“%p\n”,maxValue);
// // 存储函数地址的函数指针.
// // int maxValue (int a, int b);
// //定义一个函数的指针.
// int (*p) (int, int) = NULL;
// //int *p = NULL;
// // 对指针进行赋值.
// p = maxValue;
// //打印指针地址.
// printf(“%p\n”,p);
// // 如何用函数指针–p调用函数.
// // maxValue(10, 20);
// // p(10,20);
// printf(“%d\n”,p(10,20));
// // 指针重指向.
// p = sumNum;
// printf(“%d\n”,p(10,20));
//
//
// // void (*p1)(int,int)=NULL;
//
// // 1 - n 求和.
// void (*psum) (int) = sum;
// psum(5);
//

// // 键盘输入数字,要求实现功能,1.求最大值,2.求和.
// printf(“请输入您想要的2个数:\n”);
// int a = 0, b = 0;
// scanf(“%d%d”,&a,&b);
// printf(“请选择您需要的功能:\n”);
// int count = 0;
// printf(“1.求最大值\n”);
// printf(“2.求和\n”);
// scanf(“%d”,&count);
// int (*p1)(int,int) = NULL;
// switch (count) {
// case 1:
// p1 = maxValue;
// printf(“最大值为:%d\n”,p1(a,b));
// break;
// case 2:
// p1 = sumNum;
// printf(“和为:%d\n”,p1(a,b));
// break;
// default:
// break;
// }
//

// // 三个数找最大值.
// printf(“%d\n”,maxValue3(5, 9, 6, maxValue));
// //查找分数,改高富帅.回调函数
// STudent stu1 = {“刘山山”,81.5};
// STudent stu2 = {“刘鑫奇”,99};
// STudent stu3 = {“表弟”,91.5};
// STudent stu4 = {“杨林”,77};
// STudent stu[4] = {stu1,stu2,stu3,stu4};
// STudent *p = stu;
//
// checkScore( p, 4, changeName);

// // 动态排序
// STudent stu1 = {“刘山山”,81.5,’w’,22};
// STudent stu2 = {“刘鑫奇”,99,’m’,23};
// STudent stu3 = {“表弟”,91.5,’w’,21};
// STudent stu4 = {“杨林”,77,’m’,23};
// STudent stu[4] = {stu1,stu2,stu3,stu4};
//
// printf(“请输入排序方式:\n”);
// printf(“1.年龄\n”);
// printf(“2.成绩\n”);
// printf(“3.姓名\n”);
// int enternum = 0;
// scanf(“%d”,&enternum );
// // 定义一个函数指针的变量.
// FUN p = NULL;
//
// switch (enternum) {
// case 1:
// p = sortByAge;
// break;
// case 2:
// p = sortByScore;
// break;
// case 3:
// p = sortByName;
// break;
// default:
// printf(“输入错误!\n”);
// break;
// }
// bubblesort(stu, 4, p);
// for (int i = 0; i < 4; i++) {
// printf(“%2s\n “,stu[i].stuName);
// }

//

NameFunction name1 = {“sum”, sum};

NameFunction name2 = {“mul”,mulnum};

NameFunction name3 = {“minus”,minusnum};

NameFunction name[3] = {name1,name2,name3};
// 调用一下下!!!!
PFUN p = changeFunctionName(name,”sum”);
if (p == NULL) {
printf(“功能不对\n”);
}else{
printf(“%d\n”,p(3,5));
}
return 0;
}

//
// MY FUDITION.h
// C11- 函数指针
//
// Created by dllo on 15/7/14.
// Copyright (c) 2015年 Gaozi. All rights reserved.
//

import

import “MY FUDITION.h”

int maxValue(int a, int b){
return a > b ? a : b;
}
int maxValue3(int a, int b, int c, int (*p)(int,int)){
/* 函数的嵌套调用.
int max = maxValue(a,b);*/
int max = p(a,b);
max = max > p(a,b) ? max : p(a,b);
return max;
}
STudent changeName(STudent stu){
char str[10] = “高富帅”;
strcat(stu.stuName, str);
return stu;
}
void checkScore (STudent *p, int count, STudent (*p1)(STudent)){
for (int i = 0; i < count; i++) {
if (p[i].stuScore > 90) {
//p1(p[i]);
printf(“成绩大于90的人姓名为:%s,成绩为:%g\n”,p1(p[i]).stuName,p[i].stuScore);
}
}
}
BOOL sortByAge(STudent stu1,STudent stu2){
return stu1.stuAge > stu2.stuAge ? YES : NO ;
}
BOOL sortByScore(STudent stu1,STudent stu2){
return stu1.stuScore > stu2.stuScore ? YES : NO ;
}
BOOL sortByName(STudent stu1,STudent stu2){
return strcmp(stu1.stuName, stu2.stuName) > 0 ? YES : NO;
}
void bubblesort(STudent stu[],int count,FUN p){
for (int i = 0 ; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j ++) {
//指定排序的依据
if (p(stu[j],stu[j+1])) {
// 交换
STudent temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
}
}

}
int sum(int a, int b){
return a+b;
}
int mulnum(int a, int b){
return a * b;
}
int minusnum(int a, int b){
return a - b;
}
PFUN changeFunctionName(NameFunction name[],char str[]){
for (int i = 0; i < 3; i++) {
if (strcmp(name[i].namr, str) == 0) {
return name[i].p;
}
}
return NULL;
}

0 0