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