第09天C语言(07):指向函数的指针-基本概念

一、概念
/*
 对OC的block有一定好处
  函数也会占用一块存储空间
  函数也会占用一块存储空间,所以函数也有自己的地址
  函数的地址保存在函数名中
  函数名就是函数的地址 == 数组名就是数组的地址
 
     指向函数的指针的定义格式
     void (*funtionP) ();
     *              : 代表一个指针
     funtionP       : 代表指针变量的名称, 区分
     (*funtionP)    : 代表将来指向一个函数
     void           : 代表将来 指向的函数 没有返回值
     ()             : 代表将来 指向的函数 没有参数
 
 ---
 没有返回值 没有参数
 没有返回值 有参数
 有返回值   没有参数
 有返回值   有参数
 */
二、代码
#include 
void text()
{
    printf("lyh\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;
    printf("res = %i\n",res);
    return  res;
}

int main()
{
    printf("text = %p\n",text);
    
    /*
     没有返回值 没有参数
     void (*funtionP) ();
     没有返回值 有参数
     有返回值   没有参数
     有返回值   有参数
     
     指向函数的指针的定义格式
     void (*funtionP) ();
     *              : 代表一个指针
     funtionP       : 代表指针变量的名称, 区分
     (*funtionP)    : 代表将来指向一个函数
     void           : 代表将来 指向的函数 没有返回值
     ()             : 代表将来 指向的函数 没有参数

     普通指针的定义格式
     数据类型 *指针变量名称
     int *p;
     */
    
    /*
   void (*funcationP)();
    funcationP = text; // 注意: 千万不要写成text()
     text(); // 0x100000f30();
    (*funcationP)(); // 0x100000f30();
    //  text  == funtionP
    funcationP();
    */
    
    
//    int num = 10;
//    int *p = #
//    printf("%i\n",*p);
    
    /*

    int ages[] = {1,3,5};
    int *p;
    p = ages;// age就是数组的地址
     //    ages[0];
     //    p[0];
     //    *(p + n)
     */
    
    int (*ageP)();
    ageP = getAge;
    printf("age = %i\n",ageP());
    
    void (*sumP)(int,int);
    sumP = sum;
    sumP(10,20);
    
    
    int (*sumP2)(int,int);
    sumP2 = sum2;
    printf("sum = %i",sumP2(2,5));
    
    return 0;
}

你可能感兴趣的:(第09天C语言(07):指向函数的指针-基本概念)