函數指針

定義

返回值類型 (* 指針名稱)();
返回值類型 (* 指針名稱)(參數類型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;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容