美文网首页
函数指针

函数指针

作者: simple_jie | 来源:发表于2016-08-09 17:16 被阅读0次

    定义

    返回值类型 (* 指针名称)();
    返回值类型 (* 指针名称)(参数类型1, ...);

    int func1(int a, int b) {
        return a + b;
    }
    
    int func2(int a) {
        return a * a;
    }
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            
            // 声明
            int (* funcPoint)();
    
            // 赋值1
            funcPoint = func1;
            NSLog(@"Hello, World! %d", (* funcPoint)(10, 20));
            
            // 赋值2
            funcPoint = func2;
            NSLog(@"Hello, World! %d", (* funcPoint)(20));      
        }
        return 0;
    }
    

    声明

    int (* funcPoint)();
    声明一个返回类型为int,命名为funcPoint 的函数指针,参数列表不做限制。

    赋值

    funcPoint = func1;
    把一个叫func1的函数入口赋值给funcPoint指针

    注意

    • 编译期检查返回值类型是否匹配
    • 如果声明时不指定参数类型,则编译和运行时都不会检查参数列表,可以多传参数,也可以少传参数。输入结果未知。
    • 如果声明是指定参数列表,则会在编译期检查赋值函数的参数列表是否匹配

    函数指正作为函数参数

    int func2(int a) {
        return a * a;
    }
    
    /**
     * 函数指针作为参数
     */
    int func3(int (*fp)(), int arg) {
        return (* fp)(arg);
    }
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            NSLog(@"Hello, World! %d", func3(func2, 12));
        }
        
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:函数指针

          本文链接:https://www.haomeiwen.com/subject/oezhjttx.html