Objective-C函数指针
来源:互联网 发布:csgo mac-10皮肤 编辑:程序博客网 时间:2024/05/22 12:16
1. 函数指针: 指向函数的指针
2.程序运行过程中,函数都存储在代码块,代码块是内存的一个分类,本质上也是内存,
3.函数代码所占内存的第一个字节指针(地址)就是函数的指针(地址), 即函数的入口。
4.函数名就是函数的指针(地址)
示例:
void f1() {
NSLog(@"f1()");
}
void f2() {
NSLog(@"f2()");
}
int add(int a, int b) { int (*)(int a, int b)
return a+b;
}
int jian(int a, int b) {
return a-b;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {//打印出各函数指针的值
NSLog(@"%p", f1);//0x100000e30
NSLog(@"%p", f2);//0x100000e50
NSLog(@"%p", add);//0x100000e70
NSLog(@"%p", jian);//0x100000e90
}
return 0;
}
5.函数指针的声明
指向函数f1与函数f2的指针类型是相同的,都是void (*)()
函数原型创建指针变量p类型void f1()void (*p)() //打函数名替换成(*p)void (*)()//把函数名替换成(*)void f2()void (*p)()void (*)()指向函数f3与函数f4的指针类型是相同的, 都是 int (*)(int, int)
函数原型创建指针变量p类型int add(int a, int b)int (*p)(int, int)//打函数名替换成(*p)int (*)(int, int) //把函数名替换成(*)int jian(int a, int b)int (*p)(int, int)int (*)(int, int)示例
void f1() {
NSLog(@"f1()");
}
void f2() {
NSLog(@"f2()");
}
int add(int a, int b) {
return a+b;
}
int jian(int a, int b) {
return a-b;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
void (*p1)() = f1;
p1 = f2;
int (*p2)(int, int) = add;
p2 = jian;
}
return 0;
}
6.通过函数指针调用函数,即使用使用指针变量名替换函数名
示例
void f1() {
NSLog(@"f1()");
}
void f2() {
NSLog(@"f2()");
}
int add(int a, int b) {
return a+b;
}
int jian(int a, int b) {
return a-b;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
void (*p1)() = f1;
p1();//f1()
p1 = f2;
p1();//f2()
int (*p2)(int, int) = add;
int x = p2(1,2);
NSLog(@"x=%d",x);//x=3
p2 = jian;
int y = p2(1,2);
NSLog(@"y=%d",y);//y=-1
}
return 0;
}
- Objective-C函数指针
- Objective-C block块与函数指针
- C语言函数指针和Objective-c中的block
- Objective-C 指针理解
- Objective-C 指针理解
- objective-C 使用包含函数指针的结构体
- Objective-C 2.0 Class类型,选择器Selector以及函数指针
- [学习记录]Objective-C回调函数(函数指针)
- Objective-C Block与函数指针比较、分析
- objective-c 函数参数 传地址 传指针
- objective-c 函数参数 传地址 传指针 指向指针的指针
- Objective-c的指针学习
- Objective-c - NSObject万能指针
- Objective-C指针、栈帧、栈
- Objective-C空指针与野指针
- 【Objective-C】空指针和野指针
- objective c 函数声明
- Objective-C函数重载
- bzoj1622【Usaco2008 Open】Word Power 名字的力量
- win64+python3.4+Numpy.whl的安装
- Maven学习 (四) 使用Nexus搭建Maven私服
- mybatis之PageHelper
- Android_仿支付宝账单列表(头部停留及分页数据加载)
- Objective-C函数指针
- 微信扫码支付(native)模式二
- 尺取法 Codeforces591C Median Smoothing
- JSHint 配置浅析
- Maven学习 (五) Elipse中发布一个Maven项目到Tomcat
- 掩码
- leetcode- Longest Common Prefix
- PhantomRobot
- XMPP框架 微信项目开发之CoreData学习——CoreData的多表关联操作