函數指針

1、函數指針的定義

  int (*p)[10 ]表示定義一個數組指針,指針p 指向數組類型int [10]

  同理我們可以定義函數指針,指針指向某一函數類型

  int *(*fun)(char *p,int *n) 表示定義了一個函數指針,指向函數類型int *(char *p,int *n) //(*fun)表示定義了一個指針,fun先與*結合成爲指針,指針類型爲int * (char *p,int *n)

        int **fun(char *p,int *n) //定義的不是函數指針,而只是一個函數,函數名fun,返回值int **


  void (*p)(void ); //p是一個函數指針

  *(int *)&p = (int )Fun; //左右類型一致麼 ?

  *(int **)&p = (int )Fun;//左右類型一致麼 ?

分析:1式:右值爲整型。左值將&p強轉爲一級指針(&p指向p),表示p是整型變量。×(&p)=p = (int)Fun,左右類型相等

    2式:右值爲整型。左值將&p強轉爲二級指針(指針類型int **),表示p是一級指針(int *),×(&p)=p,表達式左值是int ×指針,右值是整型。類型不相等。


  2、*((void(*)())0)() //表達式什麼意思?

   2.1 void(*)()表示函數指針

   2.2 (void(*)())0表示將0地址強轉爲一函數指針,0地址放置一函數,類型爲void型

   2.3 最後調用這一函數


2、函數指針數組

  2.1首先是一個數組,其次數組元素類型是函數指針

   char (*p[x])(); //char *p[x]( ) 非法定義的表達式,系統不知道是什麼意思

3、函數指針數組的指針

  char (*(*p)[x])(void);

發佈了95 篇原創文章 · 獲贊 2 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章