函数指针:指向函数的指针变量.

函数名相当于首地址.
函数指针定义:返回值类型  (*函数指针变量名)(参数类型1,参数类型2,....)=初始值
函数指针类型:返回值类型  (*)(参数类型1,参数类型2,....)=初始值
如:int  (*)(int int)  表示返回值是int类型,参数有两个,都为int类型的指针变量类型
void sayHello(){
printf("你好!!! \n");
}
void (*p)()=NULL;   //表示返回值为空,无参数的,函数指针变量名是p的函数指针
p=sayHello;    //因为函数名就是地址,就是把函数名赋值给函数指针变量p
函数指针在指向相应地址后可以只用()调用函数

给函数指针类型起别名
typedef  返回值(*新类型名)(参数类型1,参数类型2...)
如:typedef int(*FUN)(int,int)  表示给int (*)(int,int) 起了个别名FUN

函数回调:用函数指针来调用函数
如:

#import <Foundation/Foundation.h>

//定义一个结构体,使用函数回调实现动态排序(年龄.姓名.分数)

typedef struct student{

char name[50];

int age;

float score;

}Student;

BOOL compareName(Student stu1,Student stu2);  //声明

BOOL compareName(Student stu1,Student stu2){  //按姓名排序实现

return strcmp(stu1.name,
stu2.name);

}

BOOL compareAge(Student stu1,Student stu2);
  //声明

BOOL compareAge(Student stu1,Student stu2){
  //按年龄排序实现

return stu1.age>stu2.age?YES:NO;

}

BOOL compareScore(Student stu1,Student stu2);
  //声明

BOOL compareScore(Student stu1,Student stu2){
  //按分数排序实现

return stu1.score>stu2.score?YES:NO;

}

void bubbleArray(Student *a,int count,BOOL (*p)(Student,Student));

void bubbleArray(Student *a,int count,BOOL (*p)(Student,Student)){ 
  //运行时函数,参数:一个指针变量,一个长度,一个函数指针

for (int i=0;
i<count-1; i++) {

for (int j=0;
j<count-1-i; j++) {

if (p(a[ j ],a[j+1]))
{    //由参数函数指针所指向的函数决定按什么类型排序

Student temp=a [ j ];

a[ j ]=a[j+1];

a[j+1]=temp;

}

}

}

for (int i=0;
i<count; i++) {   //遍历

printf("%s
%d %.2f \n",a[ i ].name,a[ i ].age,a[
i ].score);

}

}

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

Student stuArray[ 5 ]={
  //定义一个结构体数组

{"xijinping",98,80.0},

{"aobama",75,60.1},

{"benladeng",55,56.3},

{"pujing",58,88.6},

{"chengguan",63,98.0}

};

BOOL (*p)(Student,Student)=NULL; 
  //函数指针初始化

p=compareAge;     //为函数指针赋值,指向的是函数compareAge的地址

//    p=compareName;

//    p=compareScore;

bubbleArray(stuArray, 5,
p);   //调用函数

return 0;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

C语言基础:函数指针 分类: iOS学习 c语言基础 2015-06-10 21:55 15人阅读 评论(0) 收藏的更多相关文章

  1. Python调用C可执行程序(subprocess) 分类: python 服务器搭建 C/C++ shell 2015-04-13 21:03 87人阅读 评论(0) 收藏

    从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn.os.popen.popen2.commands. ...

  2. 自定义view组件 分类: H1_ANDROID 2013-10-26 21:55 741人阅读 评论(0) 收藏

    参考<疯狂android讲义>第2版 2.1节P48,对应CustomViewDemo.zip. 若在开发过程中,发现现有的view均不能满足需要,可以自定义一个view. 自定义一个vi ...

  3. C语言基础:函数(Function) 分类: iOS学习 c语言基础 2015-06-10 21:48 14人阅读 评论(0) 收藏

    函数:一段具有某些特定功能的代码段. 使用函数的严格规定: 1.函数声明 2.函数定义 3.函数调用 函数声明:告知系统编译器该系统的函数名,函数参数,参数类型,参数个数,参数顺序等等,以便函数调用时 ...

  4. C语言基础:指针初级(补充) 分类: iOS学习 c语言基础 2015-06-10 21:54 19人阅读 评论(0) 收藏

    结构体指针:指向结构体指针的变量的指针. 结构体指针指向结构体第一个成员变量的首地址 ->:   指向操作符 定义的指针变量必须指向结构体的首地址,才可以使用  ->  访问结构体成员变量 ...

  5. C语言基础:初级指针 分类: iOS学习 c语言基础 2015-06-10 21:50 30人阅读 评论(0) 收藏

    指针:就是地址. &   取地址运算符 %p   打印地址占位符 int a=0; printf("%p ",&a);    指针变量:用来存放地址的变量 定义: ...

  6. C语言基础:内存 分类: iOS学习 c语言基础 2015-06-10 21:59 23人阅读 评论(0) 收藏

    全局变量:定义在函数之外.(不安全)   局部变量;定义在函数之内. 内存的划分:1栈区   2堆区  3静态区(全局区) 4常量区 5代码区 栈区..静态区.常量区.代码区的数据都是由系统分配和释放 ...

  7. C语言基础:数组 分类: iOS学习 c语言基础 2015-06-10 21:40 7人阅读 评论(0) 收藏

    数组:是由一组具有相同数据类型的数据组合而来. 数组定义:元素类型修饰符 数组名[数组个数]={元素1,元素2....};  int arr[ 2 ]={1,2};    //正确 int arr[ ...

  8. c语言基础:数据类型 分类: iOS学习 c语言基础 2015-06-10 21:43 9人阅读 评论(0) 收藏

    C语言基本数据类型大体上分为: 整型 和 浮点型   字节: 计算机中最小的储存单位     1 Byte = 8 bit 整型:         int     4                  ...

  9. C语言基础:进制转换,变量,常量,表达式,基本数据类型,输出函数,输入函数,运算符. 分类: iOS学习 c语言基础 2015-06-10 21:39 25人阅读 评论(0) 收藏

    二进制:以0b开头,只有0和1两种数字.如0101 十进制:0~9十个数字表示.如25 十六进制:以0~9,A~F表示,以0X开头.如0X2B 十进制转换为X进制:连除倒取余 X进制转换为十进制:按权 ...

随机推荐

  1. Jmeter性能测试 对服务器使用资源进行监控之ServerAgent插件使用

    百度云盘友情赞助地址如下: 链接:https://pan.baidu.com/s/1cpAeOcfFX8kss1eo79UD9g 密码:b8o7 在windows上或者linux上打开服务 用Jmet ...

  2. bootstrap3显示5列的方法

    bootstrap是个12栅格的系统,显示5列比较麻烦,今天用到到网上找了找方法,尝试成功,记录一下,以后好用. 需要自己再添加几个 css class样式: <style> .col-l ...

  3. java编写编译器和解释器

     on 2012-07-14 21:24 Bang 阅读(102) 评论(0) 编辑 收藏  续 第二部分 初始后端实现 框架后端支持编译器和解释器.现在框架抽象类Backend有两个极简版实现,一个 ...

  4. SPP Net(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)论文理解

    论文地址:https://arxiv.org/pdf/1406.4729.pdf 论文翻译请移步:http://www.dengfanxin.cn/?p=403 一.背景: 传统的CNN要求输入图像尺 ...

  5. Codeforces 832D - Misha, Grisha and Underground

    832D - Misha, Grisha and Underground 思路:lca,求两个最短路的公共长度.公共长度公式为(d(a,b)+d(b,c)-d(a,c))/2. 代码: #includ ...

  6. Appium 坑

    1. [Android]click没有反应 https://testerhome.com/topics/9610 在某些手机上有个安全选项,需要在开发者选项->安全设置(允许模拟点击),打开开关

  7. 关于 [TNS-12516 TNS:listener could not find instance with matching protocol stack ]

    Title: Intermittent TNS-12516 or TNS-12519 Errors Connecting Via Net Symptom(s) ~~~~~~~~~~ Client co ...

  8. springboot入门(一)--快速搭建一个springboot框架

    原文出处 前言在开始之前先简单介绍一下springboot,springboot作为一个微框架,它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速.敏捷地开发新一代基于Spring框架 ...

  9. ubuntu16.04 安装NVIDIA和CUDA9.2 cudNN7.1

    1.安装NVIDIA驱动 (1)查询NVIDIA驱动 首先去官网(http://www.nvidia.com/Download/index.aspx?lang=en-us)查看适合自己显卡的驱动(下载 ...

  10. English trip V1 - 8.What's in My Bag? 我的包里面有什么? Teacher:Corrine Key: plular(复数) and singular(单数)

    In this lesson you will learn to talk about the things you have.   您将学习如何谈论您拥有的东西 课上内容(Lesson) What' ...