c語言中可以使用函式指標來指向乙個函式,通過函式指標來間接的呼叫乙個函式。c函式指標形式如下:
c 1
2
3
4
5
6
7
8
9
10
11
///
定義乙個函式
intfun
(intt)
///宣告乙個函式指標,並指向定義的fun函式
int(
*funcptr)(
int)=&
fun;
///呼叫,通過函式指標來間接的呼叫fun函式
nslog(@
"number = %d",(
*funcptr)(
10));
block型別的變數和c中的函式指標宣告很類似,只是將*替換成了^,照葫蘆畫瓢宣告乙個block變數:
objective-c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//////宣告乙個block 變數,變數名為blk
int(
^blk)(
int);
///為變數賦值,右邊為block的實現主體
blk=
^int
(intt)
; ///宣告和賦值寫在一起,實現部分省略了返回型別,
///會根據return來判斷,與左側的返回型別 int 必須一致
int(
^blkk)(
int)=^
(intt)
; ///像函式一樣呼叫block變數
nslog
(@"number = %d,%d"
,blk(10
),blkk(5
));
///block 變數作為函式引數
void
func
(int(^
blk)
(int))
利用typedef 為block變數重新命名
typedef
int(
^blk_t)(
int);
void
funcc
(blk_t
blk)
/
Block 學習筆記
一 什麼是block?a block is an anonymous inline collectionof code,and sometimes also called a closure 閉包是一種函式,它能夠讀取其它函式的內部變數。block 也相當於內聯函式,執行速度快,簡單方便 二 為什麼...
block變數儲存域
將block賦值給strong 型別的block變數,或者賦值給strong 修飾的物件型別中的block成員變數時,block會從棧複製到堆上。那 block變數會有什麼變化呢?其實,當block 被從棧複製到堆上時,block中使用到的變數也會從棧賦值到堆上。當block被從棧複製到堆前後,bl...
Block 5 Block解析之截獲區域性變數值
源 int main int argc,const char argv val 2 fmt these values were changed.val d n blk return 0 將上面的源 用命令 clang rewrite objc main.c 轉換為c 如下 struct main b...