第09天C語言(07):指向函數的指針-基本概念

一、概念
/*
 對OC的block有一定好處
  函數也會占用一塊存儲空間
  函數也會占用一塊存儲空間,所以函數也有自己的地址
  函數的地址保存在函數名中
  函數名就是函數的地址 == 數組名就是數組的地址
 
     指向函數的指針的定義格式
     void (*funtionP) ();
     *              : 代表一個指針
     funtionP       : 代表指針變量的名稱, 區分
     (*funtionP)    : 代表將來指向一個函數
     void           : 代表將來 指向的函數 沒有返回值
     ()             : 代表將來 指向的函數 沒有參數
 
 ---
 沒有返回值 沒有參數
 沒有返回值 有參數
 有返回值   沒有參數
 有返回值   有參數
 */
二、代碼
#include <stdio.h>
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;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容