ios c语言函数调用函数指针,iOS学习之C语言函数指针

通过函数名调用函数:

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学习笔记07---C语言函数-printf函数

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

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

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

iOS学习之C语言函数

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

C&num;委托与C语言函数指针及函数指针数组

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

C语言函数指针 和 OC-Block

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

C语言函数指针基础

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

&OpenCurlyDoubleQuote;对外部&lpar;局部&rpar;变量的访问”是C语言函数指针的最大弱点

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

iOS学习09C语言函数指针

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

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

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

随机推荐

Java基础知识学习(二)

Java语法基础 数据类型.类型转换.运算符.逻辑运算符.参考C#,基本一致 输入输出 输出 System.out.print("abc"); System.out.printf( ...

三种JS方法确定元素在数组中的索引值

第一种:数组遍历 function search(arr,dst){ var i = arr.length; while(i-=1){ if (arr[i] == dst){ return i; } ...

&lbrack;Head First设计模式笔记&rsqb;----命令模式

命令模式定义:将“请求”封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作. 类图: 适用设计方案举例:实现一种遥控器,该遥控器具有七个可编程的插槽(每个都可以指 ...

MySQL数学函数

官方文档:Numeric Functions and Operators Name Description ABS() Return the absolute value ACOS() Return ...

js对数组进行删除

今天在项目中遇到一个问题  就是一个json对象里边是一个个数组,用户点击选中会把选中的数据从原来的数据里边删除 想了想写了一段代码,如下 let json={title:1212,reader:10 ...

UWP作业(一)XAML Controls Gallery

作为一个编程能力不是很好的uwp初学者,在控件库里看到种类繁多的选项时,需要查资料,最后决定出几种性能各方面可能不是那么出色的控件,内心也是非常纠结的.但当我把自己当成一个用户时,通过分析自己的需求, ...

c&plus;&plus;入门之——const在函数名前面和函数后面的区别

class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前 ...

Hbase记录-zookeeper部署

#官网下载二进制包解压到/usr/app下,配置/etc/profile: export ZOOKEEPER_HOME=/usr/app/zookeeper export PATH=$PATH:$ZO ...

2019&period;01&period;21 bzoj1758&colon; &lbrack;Wc2010&rsqb;重建计划(01分数规划&plus;长链剖分&plus;线段树)

传送门 长链剖分好题. 题意简述:给一棵树,问边数在[L,R][L,R][L,R]之间的路径权值和与边数之比的最大值. 思路: 用脚指头想都知道要01分数规划. 考虑怎么checkcheckcheck ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值