C语言day09-07指向函数的指针-基本概念

pragma mark 指向函数的指针-基本概念

pragma mark 概念

/**
 对OC的block有很大的帮助
 
 指向函数的指针 的定义格式
 // 加上一个() 说明这个指针将来要指向 一个 函数
 // 函数有以下
 没有返回值没有参数
 有返回值没有参数
 没有返回值有参数
 有返回值有参数
 
 *              : 代表一个指针
 funtionP       : 代表指针变量的名称,区分
 (*funtionP)    : 代表将来指向一个函数
 void (*futionP)() 没有返回值没有参数的指针
 void           : 代表将来指向的函数 没有返回值
 ()             : 代表将来指向的函数 没有参数
 
 */
 

pragma mark 代码

#include <stdio.h>
void text() // 0x100000f20
{
    printf("我这行了\n");
}

int getAge()
{
    return 30;
}
void sum (int v1,int v2)
{
    int res = v1 + v2;
    printf("res = %i\n",res);
}
int sum2 (int v1,int v2)
{
    int res = v1 + v2;
    return res;
}

// 函数也会占用一块存储空间
// 因为函数也会占用一块存储空间,所以函数也有自己的地址
// 函数的地址保存在函数名中
// 函数名就是函数的地址  == 数组名就是数组的地址
int main()

{
    printf("text = %p\n",text);
#warning 如何定义一个指针 指向 函数
    /*
     指向函数的指针 的定义格式
     // 加上一个() 说明这个指针将来要指向 一个 函数
     // 函数有以下
     没有返回值没有参数
     有返回值没有参数
     没有返回值有参数
     有返回值有参数
     
     *              : 代表一个指针
     funtionP       : 代表指针变量的名称,区分
     (*funtionP)    : 代表将来指向一个函数
     void (*futionP)() 没有返回值没有参数的指针
     void           : 代表将来指向的函数 没有返回值
     ()             : 代表将来指向的函数 没有参数
  
     普通指针的定义格式
     数据类型 *指针变量名称
     int *p;
     */
#warning 解释
    /*
    void (*funtionP) () ;
    
    funtionP = text; // 注意: 千万不能写text()
//    text(); // 之前调用函数  0x100000ef0 ();
    (*funtionP)();  // 0x100000ef0();
    // text == funtionP
    funtionP();
    
//    int num = 10;
//    int *p = #
//    printf("%i\n",*p);
    
    int ages[] = {1,3,5};
    int *p;
    p = ages;  // ages就是数组的地址
     */
    /*
     ages[0];
     p[0];
     *(p + n);
     */
    
#warning 练习
    // 有返回值 没有参数
    int (*ageP) ();
    ageP = getAge; // 注意这里一定不要加() 加()表示调用函数 我们只需需要把函数的地址 赋给 指针
    ageP();
    printf("age = %i\n",ageP());
    
    // 没有返回值 有参数(形参)
//    void (*sumP) (int v1,int v2);
    void (*sumP) (int,int); // 可以省略形参的名称,只需要写数据类型
    sumP = sum;
    sumP(20,20);
    
    // 有返回值 有参数
    int (*sumP2) (int ,int);
    sumP2 = sum2;
    printf("sum2 = %i\n",sumP2(10,15));
    
    return 0;
}
    原文作者:liyuhong165
    原文地址: https://www.jianshu.com/p/77bb6ede02a6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞