定義
返回值類型 (* 指針名稱)();
返回值類型 (* 指針名稱)(參數(shù)類型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 的函數(shù)指針昙篙,參數(shù)列表不做限制柳弄。
賦值
funcPoint = func1;
把一個叫func1的函數(shù)入口賦值給funcPoint指針
注意
- 編譯期檢查返回值類型是否匹配
- 如果聲明時不指定參數(shù)類型畏梆,則編譯和運行時都不會檢查參數(shù)列表秆撮,可以多傳參數(shù)绢彤,也可以少傳參數(shù)描馅。輸入結(jié)果未知营勤。
- 如果聲明是指定參數(shù)列表富弦,則會在編譯期檢查賦值函數(shù)的參數(shù)列表是否匹配
函數(shù)指正作為函數(shù)參數(shù)
int func2(int a) {
return a * a;
}
/**
* 函數(shù)指針作為參數(shù)
*/
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;
}