iOS开发学习之C语言---C10 函数指针-1

//

//  main.m

//  C10 函数指针-1

//

//  Created by 康亮亮 on 15/10/20.

//  Copyright (c) 2015 Darling.com. All rights reserved.

//


#import <Foundation/Foundation.h>



int getValue(int a, int b, int (*p)(int, int)){

    // 通过函数传递进来的函数首地址,使用指针的方式调用其他函数

    int result = p(a, b);

    return result;

}


int maxValue(int a, int b){

    

    return a > b ? a : b;

}


int sum(int a, int b){

    

    int sum = a + b;

    return sum;

    

}


void printHello(){

    printf("Hello, everyone!\n");

}


void printBaby(){

    

    printf("AndroidBaby\n");

}


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

    

    

#pragma mark 函数指针

    /*

     * 指向函数的指针,叫做函数指针,函数指针的类型和指向的函数类型一致(函数类型:返回值的类型和参数的个数以及参数的类型)

     * 函数名代表的是函数的首地址,所以函数指针可以和函数名混合使用(就像数组名和数组指针一样)

     */

    // 定义一个函数指针

    //    int (*p)(int, int) = NULL;  //int (*p)(int a, int b);也可以这样写。为了和函数声明区分开,一般在定义一个函数指针时,省略参数的名字

    //    p = maxValue;

    //

    //    // 通过函数名来调用函数

    //    printf("maxValue = %d\n", maxValue(23, 21));

    //    // 通过指向函数的指针来调用函数。

    //    printf("maxValue = %d\n", p(23, 21));

    

    

    //    void (*p)() = NULL;    //void (*p)(void) = NULL;

    //    p = printHello;

    //    p();

    //`

    //    void (*p1)() = NULL;

    //    p1 = printBaby;    // 因为函数printBaby的类型和函数指针p1的类型一致,所以可以用p1指向printBaby

    //    p1();

    

    

    //定义两个函数,⼀个求最⼤值,一个求和,输入maxsum分别求3,5的最大值或和(提示,定义一个函数指针,根据输入内容指向不同函数,最后一次调用完成)

    

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

    //    char name[20];

    //    printf("请输入maxValuesum\n");

    //    while (p == NULL){

    //        scanf("%s", name);

    //        if (strcmp(name, "maxValue") == 0) {

    //

    //            p = maxValue;

    //            //printf("max = %d", maxValue(4, 8));

    //

    //        }else if(strcmp(name, "sum") == 0){

    //            p = sum;

    //            //printf("sum = %d", sum(4, 8));

    //        }else{

    //            printf("亲,请输入“maxValue”“sum”其中一个!!");

    //        }

    //

    //    }

    //    if (p != NULL) {

    //        int result = p(4, 8);

    //        printf("result = %d\n", result);

    //    }

    

    

#pragma mark 函数回调

    /*

     函数回调:函数在执行时需要调用另外一个函数,这个过程叫做函数回调(动词)

     回调函数: 被调用的那个函数叫做回调函数(名词)

     我们可以使用函数指针作为函数的参数,实现函数回调。

     */

    

    // getValue函数将函数的地址(函数地址)作为参数传递进去,这样大大提高了getValue这个函数的灵活性,可以不用修改getValue的代码,就能实现不同的功能。

    // 调用getValue函数

    //    // 1.创建函数指针,并指向其中一个函数

    //    int (*funcP)(int, int) = maxValue;

    //    // 2.调用getValue函数,实现求最大数的功能

    //    int result = getValue(3, 5, funcP);

    //    printf("result = %d\n", result);

    

    

    //写一函数查找成绩90分以上的学员,使用回调函数在姓名后加高富帅

    

    

    return  0;

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值