1.返回指针的函数
char * demo();
int main(int argc, const char * argv[]) {
char *name = demo();
printf("----%s\n",name);
return 0;
}
char * demo(){
char *name = "hello world";
return name;
}
//输出:
----hello world
2.指向函数的指针
总结:这里的指向函数的指针,与c语言的函数,oc中的block有以下的共同点:
分三步:1.声明 2.定义(实现) 3.调用,指向函数的指针与oc中非常重要的block之间的区别只有一个*
- 1.为什么指针可以指向一个函数?
- 函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。
- 2.针函数的定义和使用
按照返回值跟参数将函数分为四类,同样对应的是四种类型的指向函数的指针,直接上代码
#include <stdio.h>
void printStr(void);
void constomPrint(char *str);
int getnums(void);
int sum(int v1,int v2);
int main(int argc, const char * argv[]) {
//指向无参无反函数的指针
//声明
void(*p1)(void);
//定义
p1 = printStr;
//调用(执行)
p1();
//指向有参无反函数的指针
//声明
void(*p2)(char *);
//定义
p2 = constomPrint;
//调用(执行)
p2("sjcool");
//指向无参有反函数的指针
//声明
int(*p3)(void);
//定义
p3 = getnums;
//调用(执行)
int a = p3();
printf("------a:%i\n",a);
//指有无参有反函数的指针
//声明
int(*p4)(int,int);
//定义
p4 = sum;
//调用(执行)
int b = p4(3,5);
printf("------b:%i\n",b);
return 0;
}
void printStr(){
printf("无参无反\n");
}
void constomPrint(char *str){
printf("自定义打印%s\n",str);
}
int getnums(){
return 666;
}
int sum(int v1,int v2){
return v1+v2;
}
//输出:
无参无反
自定义打印sjcool
------a:666
------b:8