1.首先要了解什么叫做typedef
typedef就是C语言中的一个关键字,其作用就是给一个数据类型起一个别名
typedef作用主要有两个。
1)给类型起一个比较容易记住的名字
2)简化较为复杂的类型声明
2.typedef的具体使用方法
<span style="font-size:18px;">#import <Foundation/Foundation.h>
typedef int newint;
typedef float newfloat;
int main(int argc, const char * argv[])
{
@autoreleasepool {
newint a=2;
NSLog(@"%d",a);
newfloat b=35.5;
NSLog(@"%d",b);
}
return 0;
}
</span>
上述例子中我们就可以看出typedef int newint; 此处的newint 就等价于newint 同样我们可以知道typedef float newfloat;中的newfloat就等价于float
3.函数指针
首先要明确函数指针其实就是一个指针,只不过这个指针的地址里面存的是函数
那么怎么定义呢
首先我们定义一个函数 int add (int x,int y); 他的函数指针就是直接 把函数名称换成一个 指针 int (*p) (int x, int y);
<span style="font-size:18px;">/*
函数指针: 指向函数的指针
指针函数: 返回值是指针类型的函数
int add(int x,int y){
return x+y;
}
*/
#import <Foundation/Foundation.h>
//声明函数
int add(int x,int y){
return x+y;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
//使用函数名取调用函数,直接访问
//函数名,存放的是函数的首地址
int m = add(34,438);
NSLog(@"m = %d",m);
//指针变量间接访问
//函数指针的定义:
//定义了一个函数指针变量,名称是p
// p 可以指向返回值是int 并且有两个int类型的参数的函数
int (*p)(int x,int y);
p = add;
m = p(34,12); //间接访问
NSLog(@"m = %d",m);
//p是一个指针变量? 还是一个类型?
// <span style="color:#FF6666;">此时把 返回值是int 有两个整型参数的函数,起了别名,别名是p,是一个类型</span>
typedef int (*p)(int x,int y);
//p = add; 错误 因为此时p是一个别名类型
p pmax;
pmax = max;
NSLog(@"pmax = %d",pmax(34,12));
}
return 0;
}
</span>
4.利用typedef定义block类型(和指向函数的指针很像) (block在这里就不详细介绍了)
<pre name="code" class="objc"><span style="font-size:18px;">#import <Foundation/Foundation.h></span>
int main(int argc, const char * argv[]) { @autoreleasepool { //myblock 是没有参数,没有返回值的block类型的变量// void (^myblock)(); //1,给没有参数,没有返回值的block起别名 //myblock 是一个类型 //给没有返回值,没有参数的代码块,起一个别名 myblock typedef void (^myblock)(); //定义一个返回值是void没有参数的block变量,名称为b1 myblock b1; //b1是一个变量,myblock是一个类型 //给block变量赋值 b1 = ^{ NSLog(@"test b1"); }; //执行block b1(); //2,给有参数的block起别名 typedef void (^blockType1)(int x,int y); //使用别名定义block变量,并且初始化 //blockType 是一个类型 //bt是一个变量 blockType1 bt = ^(int x,int y){ NSLog(@"x+y = %d",x+y); }; bt(34,23); //3,给有参数,有返回值的block起别名 typedef int(^blockType2) (int x,int y); //定义有参数,有返回值的block变量,blockType2是类型,名称是b2 blockType2 b2 = ^(int x,int y){ return x+y; }; int s = b2(23,10); NSLog(@"s = %d",s); } return 0;}