C语言中Block的用法回忆
//
// main.m
// iOS第一天
//
// Created by lanou on 16/10/20.
// Copyright (c) 2016年 lanou. All rights reserved.
//
#import <Foundation/Foundation.h>
//block块(类型):封装了一段具有特定功能的代码段
// 函数有函数名,block是没名字的,也可以叫做匿名函数,函数不能做参数传递,block可以作为参数传递
// 形式:
/*
返回值类型(^block变量名)(参数列表)=(^)(参数列表){
代码段
return 如果返回值类型不是void就将返回值ruturn回去;
}
*/
//调用
//block变量名()
//无参无返
// main.m
// iOS第一天
//
// Created by lanou on 16/10/20.
// Copyright (c) 2016年 lanou. All rights reserved.
//
#import <Foundation/Foundation.h>
//block块(类型):封装了一段具有特定功能的代码段
// 函数有函数名,block是没名字的,也可以叫做匿名函数,函数不能做参数传递,block可以作为参数传递
// 形式:
/*
返回值类型(^block变量名)(参数列表)=(^)(参数列表){
代码段
return 如果返回值类型不是void就将返回值ruturn回去;
}
*/
//调用
//block变量名()
//无参无返
// void(^变量名)()=^(){}
void demo0(){
//无参无返的block(举例:写一个block,用for循环打印三句Hellow Word)
void (^Asads)()=^(){
for (int i=0; i<3; i++) {
NSLog(@"Hellow Word");
}
};
//block的调用 变量名 参数列表
Asads();
}
//有参无返
void demo0(){
//无参无返的block(举例:写一个block,用for循环打印三句Hellow Word)
void (^Asads)()=^(){
for (int i=0; i<3; i++) {
NSLog(@"Hellow Word");
}
};
//block的调用 变量名 参数列表
Asads();
}
//有参无返
//void(^变量名)(参数类型 参数名)=^(参数类型 参数名){}
void demo1(int n){
//有参无返的block(举例:写一个block,用for循环打印n次Hellow Word,打印次数由键盘输入
void (^asd)(int n)=^(int n){
for (int i=0; i<n; i++) {
NSLog(@"Hellow Word");
}
};
//block的调用 变量名 参数列表
asd(n);
}
//无参有返
//返回值类型(^block变量名)()=^(){}
void demo2()
{
int (^peopleCount)()=^(){
return 28;
};
int count=peopleCount();
NSLog(@"%d",count);
//定义一个block返回字符串hello
char *(^string)()=^(){
return "hello";
};
char * str=string();
NSLog(@"%s",str);
}
void demo1(int n){
//有参无返的block(举例:写一个block,用for循环打印n次Hellow Word,打印次数由键盘输入
void (^asd)(int n)=^(int n){
for (int i=0; i<n; i++) {
NSLog(@"Hellow Word");
}
};
//block的调用 变量名 参数列表
asd(n);
}
//无参有返
//返回值类型(^block变量名)()=^(){}
void demo2()
{
int (^peopleCount)()=^(){
return 28;
};
int count=peopleCount();
NSLog(@"%d",count);
//定义一个block返回字符串hello
char *(^string)()=^(){
return "hello";
};
char * str=string();
NSLog(@"%s",str);
}
//有参有返
int demo3(int a,int b,char c){
//有参有返
//写4个block来做4则运算(+,-,*,/) a,b值由键盘输入
int (^yunsuan)(int a,int b,char c)=^(int a,int b,char c){
int numver = 0;
if (c=='+') {
numver=a+b;
}
if (c=='-') {
numver=a-b;
}
if (c=='*') {
numver=a*b;
}
if (c=='/') {
numver=a+b;
}
return numver;
};
int numver=yunsuan(a,b,c);
return numver;
}
//disBlock是给int(^)(int a,int b)这种Block类型定义的一个新名字,以后我们适用disBlock就
// 表示int(^)(int a,int b)这个类型
typedef int (^disBlock)(int a,int b);
int main(int argc, const char * argv[]) {
@autoreleasepool {
int a,b;
char c;
scanf("%d %d %c",&a,&b,&c);
disBlock add=^(int a,int b){
return a+b;
};
disBlock jian=^(int a,int b){
return a-b;
};
NSLog(@"%d %d",add(a,b),jian(a,b));
}
return 0;
}
int demo3(int a,int b,char c){
//有参有返
//写4个block来做4则运算(+,-,*,/) a,b值由键盘输入
int (^yunsuan)(int a,int b,char c)=^(int a,int b,char c){
int numver = 0;
if (c=='+') {
numver=a+b;
}
if (c=='-') {
numver=a-b;
}
if (c=='*') {
numver=a*b;
}
if (c=='/') {
numver=a+b;
}
return numver;
};
int numver=yunsuan(a,b,c);
return numver;
}
//disBlock是给int(^)(int a,int b)这种Block类型定义的一个新名字,以后我们适用disBlock就
// 表示int(^)(int a,int b)这个类型
typedef int (^disBlock)(int a,int b);
int main(int argc, const char * argv[]) {
@autoreleasepool {
int a,b;
char c;
scanf("%d %d %c",&a,&b,&c);
disBlock add=^(int a,int b){
return a+b;
};
disBlock jian=^(int a,int b){
return a-b;
};
NSLog(@"%d %d",add(a,b),jian(a,b));
}
return 0;
}