函數指針的一些概念詳解。本站提示廣大學習愛好者:(函數指針的一些概念詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是函數指針的一些概念詳解正文
函數指針
比來看android camera 的source ,發明年夜量的call back ,多線程,有需要對個中的基本 :函數指針溫習一下,認為函數指針重要照樣用在call back 函數,和多線程多過程編程中。函數在被編譯器編譯後就是一段二進制碼,而這段二進制碼有一個進口地址,而這個進口地址就是函數指針的值了。
起首看函數指針的語法,舉一個最簡略的例子,要創立一個函數指針,則它與它指向的函數,在參數個數類型和前往值上都堅持分歧,跟重載的請求應當是一樣的。
Int a(int a ) {return a ; }
Int (* b)(int n) ; // 函數指針
b = a ; // 對函數指針停止賦值
// 也能夠應用b = &a ; 可以打印a 和&a 的值,現實是雷同的
// 也能夠直接應用int (*b)(int b) = a ;
b(1) ; // 後果同a(1)
// 也能夠應用(*b)(1) ,下面的方法是尺度c++ 的,正文中是為了兼容c ,可以打印b 和*b 的值,現實是雷同的。
別的和函數指針常常一路湧現的就是typedef ,由於函數指針的括號其實太多,特別觸及到類的成員的函數的時刻,是以為了便利普通合營typedef 應用:
typedef int (*b)(int n) ;
b b1 ;
b1 = a ; // 相當於int (*b1)(int n) = a ;
在call back 中典范的就是將須要call back 的函數指針傳入,然後又挪用函數依據函數指針call back 須要回調的函數:
int func(b callback , int num)
{
return callback(num) * num ;
}
別的除平凡單個函數指針外,還可以有函數指針數組:
b array[10] = {a1,a2,a3……} // 現實為int (*b[10])(int n) ; [] 比*優先級高
array[0](1) ;