您的位置:首页 > 编程语言 > C语言/C++

C语言11 -- 函数指针

2015-07-21 20:30 405 查看
//
// 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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: