返回指针的函数与指向函数的指针

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容