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);