int (^aBlock)(int)=^(int count){
return count+1;
};
int(^bBlock)(int)=aBlock;
void func(int (^block)(int)){}
int (^func())(int){
return ^(int count){
return count+1;};
}
指向函數的指針:可以仿照上邊基本數據類型的定義
例如:void
(*p)() =function; (funciton是某個定義好的函數)
格式:函數類型
*指針變量名 = 函數名;
說明:由於p指針是指向函數的,所以(*p)()中的紅色小括號必須有,因爲函數本身是要參數的,即使沒有參數也要寫();
如果p指向的函數有參數:int (*pp)(int, int) = sum;
調用指向函數的指針:
無參:p();
有參:int sum = pp(2,3);
block的定義和使用,和指向函數的指針格式很像
例如:void
(^firstBlock)() = ^(){...代碼...}; 說明:藍色的小括號可以不寫,有參數的時候必須寫
格式:block類型 ^block名稱 = ^{代碼段};
有參數block:int (^multiBlock)(int, int) = ^(int a, int b){
return a * b;
};
調用block:無參:firstBlock()
有參:int result = multiBlock(2, 3);
函數指針作爲函數返回值:
void (*fun1(double d))(int, char) { printf("%f\n",d); return fun; } |
typedef int (^blk_t)(int);
blk_t blk=^(int count){return count+1};
blk_t *blkptr=&blk;
(*blk_ptr)(10);
int temp=2;
void (^myBlk)(void)=^(){printf(“%d",temp);};
temp=100;
myBlk();
__block inttemp=2;
void (^myBlk)()=^(){
temp+=8;
};
myBlk();
printf("----%d",temp);
const char text[]="zyb";
void(^blk)(void)=^{
printf("%c",text[2]);
};
const char*text="zyb";
void(^blk)(void)=^{
printf("%c",text[2]);
};
Blocks簡介到此,下一篇文章將會寫Blocks的實現。