函数指针

定义

返回值类型 (* 指针名称)();
返回值类型 (* 指针名称)(参数类型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;
}

你可能感兴趣的:(函数指针)