標籤:style blog http color 使用 strong
Block 、數組進階
block本質上就是匿名函數(沒有名稱的函數)
block文法和函數指標很相似
回顧函數
函數:C語?中,實現某一類功能的程式碼片段。
完整的函數包含兩部分:函式宣告、函數定義
函式宣告,即函數原型。例如:int sum(int x,int y);具有兩個整型參 數,一個整型傳回值的函數。
函數定義,即函數實現。例如:int sum(int x,int y){
retrun x + y;
}
回顧函數指標
函數指標(變數):存放函數地址(函數名)的指標變數。
int (*p)(int x,int y) = sum;
函數指標類型:int (*)(int x,int y) 即:指向 兩個整型參數,一個整型傳回值函數 的指標。
函數指標變數:p 函數指標的值:sum
Block
匿名函數:沒有名稱的函數。 例如 int (int x, int y)
因為Block是匿名函數,block變數存放的函 數的實現,通過block變數能直接調?用函數
沒有名稱的函數應該如何調?用?(有名稱的話,可以直接調?用,也
可以通過函數指標來調?用)
int (^block1)(int,int) = ^int (int x,int y) { return x + y; }; //類型 int(^)(int,int) //變數名 block1 //初始值// ^int (int x,int y)// {// return x + y;// } typedef int (^BlockType)(int,int); BlockType block2 = ^ int (int x,int y){ return x * y; }; //給block 變數賦值時 值的特點:以 ^ 開頭 函數的定義(實現),去掉函數名
block函數定義中傳回值類型 可以省略 通常都會省略
1 int (^aa)() = ^(){ 2 return 10; 3 }; 4 //當block沒有參數的時候可以把函數定義後面的()省略掉 5 // int (^aa)() = ^{ 6 // return 10; 7 // }; 8 NSLog(@"%d",aa()); 9 void (^hello)() = ^{10 NSLog(@"hello world");11 };12 hello();//沒有傳回值沒有參數的block
在block體中可以直接使用外部變數,但是不能修改這個變數 想要修改在變數前面加__block;