定義
返回值類型 (* 指針名稱)();
返回值類型 (* 指針名稱)(參數類型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;
}