[学习笔记]Objective-C与C学习交接(3)

/*随着开发规模增大,有可能出现各公司的定义函数重名,  OC建议为函数名增加公司前缀,如NSLog 该函数就再前面增加了NS前缀。

C语言指针是十分灵活的, 接下来将学到一些指针的高级内容。*/

函数指针变量的语法格式为:

函数返回值类型(* 指针变量名)();


//指向函数的指针变量  用法回顾
#import <Foundation/Foundation.h>
 int max(int* data,int len)
        {
            int max= *data;
            //保证max始终存储较大的值;
            for(int* p=data;p<data+len;p++)
            {
                if(*p>max)
                    max=*p;
            }
            return max;
        }
int average(int *data,int len)
{
    int sum=0;
    for(int* p =data;p<data+len;p++)
    {
        sum+=*p;
        
    }
    return  sum;
    
}

int main(int argc, const char * argv[])
{
    @autoreleasepool
    {   int data[]={20,12,8,36,93,25};
        //定义指向函数的指针变量:fnPt, 并将max函数的入口赋给fnPt
        int(*fnPt)();
        fnPt=max;
        NSLog(@"最大值:%d",(*fnPt)(data,5));
        //将avg函数的入口赋给fnPt
        fnPt=average;
        NSLog(@"平均值:%d",(*fnPt)(data,5));
    }
    
    return 0;
}



函数指针变量的使用增加了函数调用的灵活性,这使得我们可以将函数指针变量作为参数传入另一个函数;

那么,就需要在函数中定义函数参数,调用该函数时传入不同的函数作为参数,即可动态改变这段代码;

例如以下代码:

#import <Foundation/Foundation.h>
void map(int* data,int len, int(*fn)())
{
    //采用指针遍历data数组元素
    for(int* p=data;p<data+len;p++)
    {
        printf("%d,",(*fn)(*p));//关键步骤 调用fn函数(fn函数是动态传入的)
    }
}
int noChange(int val)
{
    return val;
}
int square(int val)
{
    return val*val;
    
}
int cube(int val)
{
    return val*val*val;
    
}
int main(int argc, const char * argv[])
{
    @autoreleasepool
    {   int data[]={20,12,8,36,24};
        NSLog(@"\n数组元素:");
        map(data,5,noChange);
        NSLog(@"\n计算数组元素平方:");
        map(data,5,square);
        NSLog(@"\n计算数组元素立方:");
        map(data, 5, cube);
    }
    return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值