iOS入门(十四)函数指针

本文通过两个具体案例介绍函数指针的应用:一是利用回调函数实现字符串中单词首字母的大写转换;二是通过动态函数调用来实现数值运算,包括求最大公约数和最小公倍数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数指针
函数名代表函数的内存地址(入口地址)
函数指针定义  :(指针名可以代表函数名)

//    int (*p ) ( int , int) = maxValue;       or

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

    p = maxValue;

重命名:


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

动态排序

函数指针数组

返回值是函数指针

动态调用 


输入一句英文句子,将其中所有的单词首字母转换成大写,用回调函数实现。


动态函数调用实现下列操作:输入两个数以及操作符计算结果。@求最大公约数    ¥ 求最小公倍数

main .m

 

   printf(" 题目一 :    \n");

    char str[] = "i want a pencil";

    zheng(str);

    for ( int i = 0 ;  i < strlen(str) ; i ++ ) {

        printf("%c" , str[i]);

    }

    printf("\n");

    

    printf( " 题目二   :   \n");

    int a = 0 ,b = 0 ;

    scanf("%d,%d" , &a , &b ) ;

    printf("%d\n" , dongtai(a, b, '$'));

.h

 

char hange(char  s );

typedef  char (*PF)  (char);

void zheng(char  * s );



int maxGY(int a , int b ) ;

int minGB(int a , int b ) ;

typedef  int (*PFU) (int , int ) ;

struct func{

    char  a ;

    PFU  b ;

};

typedef struct func  Choose;

PFU changefun(char *s) ;

int dongtai ( int a , int b , char c  ) ;

.m

 

char hange(char  s )

{

    char t = s - 32;

    s = t ;

    return  s ;

}

void zheng(char  *s )

{

    PF p = hange;

    if (s[0] >= 'a' || s[0] <= 'z') {

        s[0] = p (s[0]);

    }

    int i = 1 ;

    while (s[i] != '\0') {

              if (s[i] == ' ' )

        {

            s[i+1] = p( s[i + 1 ] );

            i ++ ;

        }

        i ++ ;

    }

}



int maxGY(int a , int b )

{

    while (a%b != 0 ) {

        int temp = a%b;

        a = b ;

        b = temp ;

    }

    return b ;

}

int minGB(int a , int b )

{

    return a*b/maxGY(a, b);

}

PFU changefun(char *s)

{

    Choose xuan[2] = {{'@' , maxGY} , { '$' , minGB}};

    PFU pp = NULL ;

    for (int i = 0 ;  i < 2 ;  i ++ ) {

        if (*s == xuan[i] . a) {

            pp = xuan[i] . b;

            break;

        }

    }

    return pp;

}

int dongtai ( int a , int b , char c )

{

    PFU p = changefun(&c );

    int dd = p(a,b);

    return dd;

}

    printf(" 杨辉三角\n\n");

    int array[9][9] = { } ;

    for (int i = ; i <  i ++ ) {

        array[i][0] = ;

        array[i][i] = 1;

        for (int j =  j

            array[i][j] = array[i-1][j-1] + array[i-1][j];

        }

    }

    for (int i =  i <  i ++ ) {

        for (int j =  j > i ; j --) {

            printf("  ");

        }

        for (int k =  k <= i ;  k ++ ) {

            printf("-  " , array[i][k]);

        }

        printf("\n");

    }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值