day11基础代码——函数指针

//

//  main.m

//  Demo11

//

//  Created by scjy on 15/10/29.

//  Copyright © 2015年 lizhipeng. All rights reserved.

//

 

#import <Foundation/Foundation.h>

//typedef int (*MAXV)(int ,int );//形参名可以省略

typedef int (*MAXV)(int x,int y);//相当于把int (*)(int x,int y)定义成了MAXV

int maxValue(int x,int y){

    return x > y ? x :y;

}

 

int sum(int x,int y) {

    

    return x + y;

}

 

int mult(int x,int y) {

    

    return x * y;

}

 

char printfhello(char str){

    return str;

}

 

void printhello0(char str){

    printf("%c\n",str);

}

 

void printhello(char *str){

    printf("大家好,我叫%s\n",str);

}

typedef int (*SUN)(char *a ,char *b);

int sun(char *a,char *b){

    int str = strcmp(a,b);

    return str;

}

 

int getValue(int x,int y,MAXV P){

    return P(x,y);

}

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

    @autoreleasepool {

        

        

            //*************** 第十一讲 函数指针*********************//

        

        //函数指针定义 函数是存在代码区,也是有内存地址的。

        //函数声明 函数定义 函数调用

        printf("%d\n",sum(123, 456));

        printf("%p\n",&sum);

        

        //函数指针定义: int(*)(int x ,int y)= null 指针定义

        //数据类型 (*指针变量名)(形式参数列表) 初值null

        

//        char stra = 'h';

//        char *strb =&stra;

        printf("这是一个字符:%c\n",printfhello('h'));

//定义一个可以指向上述函数的函数指针,并通过函数指针实现调用该函数。

        //函数 指针 字符串

        printhello0('h');

//        char str0[6] = "hello";

//        char *str =str0;

        printhello("hello");

        

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

//        p1 = printhello;

//        p1("hello");

        

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

        p = sum;

        printf("%d\n",p(7,9));

 

        //函数指针重指向

        p = mult;

        printf("%d\n",p(5,12));

 

        

//        int (*p3)(int x,int y) = NULL;

//        p3 = maxValue;

//        printf("%d\n",p3(6,5));

 

        

        MAXV p3 = maxValue;

        printf("%d\n",p3(60,5));

        

//        char str4[6] = "he";

//        char str5[6] = "llo";

//        char *strr1 = str4;

//        char *strr2 = str5;

        SUN p4 = sun;

        printf("---===%d\n",p4("he","llo"));

        //给函数指针赋值的 函数,应该和函数指针定义的函数原型 保持一致。

        

//定义两个 函数 ,一个求 最大值,一个 求和,输入maxValue或sum分别求3,5的最大值或和

//(提示,定义一个 函数指针 ,根据输入内容指向不同函数,最后一次调用完成)。

//        MAXV p5 = NULL;

//        char let[10];

//        printf("输入maxValue或sum:\n");

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

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

//            p5 = maxValue;

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

//            p5 = sum;

//        } else {

//            printf("null....\n");

////            return 0;

//        }

//        if (p5 != NULL) {

//            printf("%d\n",p5(60,5));

//        }

////        printf("%d\n",p5(60,5));

        

        

        //回调函数callback

        MAXV p6 = NULL;

        p6 = mult;

//        int h = getValue(3, 5, p6);

        printf("%d\n",getValue(3, 5, p6));

        

        

        MAXV p7 = sum;

        printf("%d\n",p7(7,9));

        printf("%d\n",getValue(6, 6, p7));

        printf("%d\n",getValue(6, 6, mult));

        printf("%d\n",getValue(6, 6, maxValue));

        

        //动态排序

        

//        //2.

//        int (*p)(int x, int y);

//        p = sum;

//        int y = p(7, 9);

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

//        //3.

//        int (*p)(int x, int y) = sum;

//        int y = p(7, 9);

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

//        //4.

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

//        p = sum;

//        int y = p(7, 9);

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

        

    }

    return 0;

}

 

posted @ 2015-11-02 18:07  朝阳向上  阅读(152)  评论(0编辑  收藏  举报