通过函数名调用函数:

  int max = maxValue(4, 5);
  printf("max = %d\n", max);
    
  函数类型:int (int, int)

  1.定义函数指针

  int *p = NULL;

  函数类型:int (int, int)

  函数指针的类型:int (*)(int, int)

  p是函数指针变量名

  int (*p)(int, int) = NULL;

  2.给函数指针赋值(使用函数首地址)

  函数存放在代码区,函数名是函数存储空间的首地址

  p = maxValue;

  3.通过函数指针调用函数和通过函数名调用函数一样。

  动态排序:

  使用回调函数,提高代码的复用性,提高代码的可修改性(当需求有变化时,可以快速简单的修改)

  

 Function.h
 struct student {

     ];  // 姓名
     int age;        // 年龄
     double score;   // 成绩
     int num;        // 学号

 };
 typedef
 // 打印所有学生的信息
 void printArray(Student stuArray[], int count);

 // 比较两个学生的年龄
 BOOL compareStuAge(Student stu1, Student stu2);

 // 比较两个学生的姓名
 BOOL compareStuName(Student stu1, Student stu2);

 // 比较两个学生的成绩
 BOOL compareStuScore(Student stu1, Student stu2);

 // 比价两个学生的学号
 BOOL compareStuNum(Student stu1, Student stu2);

 typedef BOOL (*FUNC)(Student, Student);

 // 排序函数
 void sortStudent(Student *stu, int count, FUNC p);
 Function.m

 // 比较两个学生的年龄
 BOOL compareStuAge(Student stu1, Student stu2) {
     return stu1.age > stu2.age;
 }

 // 比较两个学生的姓名
 BOOL compareStuName(Student stu1, Student stu2) {
     ;
 }

 // 比较两个学生的成绩
 BOOL compareStuScore(Student stu1, Student stu2) {
     return stu1.score < stu2.score;
 }

 // 比价两个学生的学号
 BOOL compareStuNum(Student stu1, Student stu2) {
     return stu1.num > stu2.num;
 }

 // 排序函数
 void sortStudent(Student *stu, int count, FUNC p) {

     ; i < count - ; i++) {
         ; j < count -  - i; j++) {
             ])) {
                 Student temp = stu[j];
                 stu[j] = stu[j + ];
                 stu[j + ] = temp;
             }
         }
     }
 }
 main.m
 int main(int argc, const char * argv[]) {

     Student stu1 = {, };
     Student stu2 = {, , };
     Student stu3 = {, -, };
     Student stu4 = {, , };
     Student stu5 = {, , };

     Student stuArray[] = {stu1, stu2, stu3, stu4, stu5};
     int count = sizeof(stuArray) / sizeof(Student);
 // 动态排序
     sortStudent(stuArray, count, compareStuNum);
     printArray(stuArray, count);
     sortStudent(stuArray, count, compareStuAge);
     printArray(stuArray, count);
     sortStudent(stuArray, count, compareStuName);
     printArray(stuArray, count);
     sortStudent(stuArray, count, compareStuScore);
     printArray(stuArray, count);

iOS学习之C语言函数指针的更多相关文章

  1. IOS学习笔记07---C语言函数-printf函数

    IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...

  2. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

  3. iOS学习之C语言函数

    一.函数的定义 返回值类型 函数名(参数类型 参数名, ...) { 功能语句; return 返回值; } 按照返回值和参数划分: 第一种: 无返回值 无参 void sayHello() { pr ...

  4. C#委托与C语言函数指针及函数指针数组

    C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...

  5. C语言函数指针 和 OC-Block

    C语言函数指针 和 OC-Block 一. C语言函数指针 关于函数指针的知识详细可参考:http://www.cnblogs.com/mjios/archive/2013/03/19/2967037 ...

  6. C语言函数指针基础

    本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...

  7. “对外部(局部)变量的访问”是C语言函数指针的最大弱点

    1.“对外部(局部)变量的访问”是C语言函数指针的最大弱点 . #include <stdio.h> #include <stdlib.h> /* 结构体定义 */ struc ...

  8. iOS学习09C语言函数指针

    本次主要学习和理解函数指针 1.函数指针 void printValue(int number) { printf("number = %d\n", number); } int ...

  9. c语言函数指针的理解与使用(学习)

    1.函数指针的定义 顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: 1 2 3 A) char * (*fun1)(char * p1,char * p2); B) char  ...

随机推荐

  1. 华为OJ平台——24点游戏

    题目描述: 给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利 输入: 4个1-10的数字.[数字允许重复,测试用例保证无异常数字]输出: true or false 思路:

  2. 开源项目:FFmpeg

    ffmpeg命令行使用 将JPG格式图片转成YUV420P格式: ffmpeg -i Z:\demo\pic.jpg -s 720x480 Z:\demo\pic.yuv 解码H265成YUV420 ...

  3. CSS 属性设置优先级问题

    1.多个选择器可能会选择同一个元素,有3个规则,从上到下重要性降低: !important的用户样式 !important的作者样式 作者样式 用户样式 浏览器定义的样式 2. CSS规范为不同类型的 ...

  4. SQL Server 数据库设计

    一.数据库设计的必要性 在实际的软件项目中,如果系统中需要存储的数据量比较大,需要设计的表比较多,表与表之间的关系比较复杂,那我们就需要进行规范的数据库设置.如果不经过数据库的设计,我们构建的数据库不 ...

  5. Windows phone 8 学习笔记(8) 定位地图导航(转)

    Windows phone 8 已经不使用自家的bing地图,新地图控件可以指定制图模式.视图等.bing地图的定位误差比较大,在模拟器中测试新地图貌似比较理想.本节主要讲解下位置服务以及新地图控件的 ...

  6. 你真的理解z-index吗?

    一.前言 假如只是开发简单的弹窗效果,懂得通过z-index来调整元素间的层叠关系就够了.但要将多个弹窗间层叠关系给处理好,那么充分理解z-index背后的原理及兼容性问题就是必要的知识储备了.本文作 ...

  7. MyBatis学习系列一之环境搭建

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 学习一个新的知识,首先做一个简单的例子使用一下,然后再逐步深入.MyBat ...

  8. javaSE第四天

    第四天    18 1. switch语句(掌握)    18 (1)格式:    18 (2)面试题    19 (3)执行流程:    19 (4)注意事项:    19 (5)案例:    19 ...

  9. WindowsPhone使用HtmlAgilityPack解析HTML

    NuGet里添加HtmlAgilityPack的引用 然后wp上使用必须添加本地 C:\Program Files (x86)\Microsoft SDKs\Silverlight\v4.0\Libr ...

  10. 必须会的SQL语句(二) 创建表、修改表结构、删除表

    1.创建数据库表 --使用哪个数据库,如果不写这一句是默认的数据库,也可以用鼠标选当前数据库 use testDB --创建表    Create Table tablename    (       ...