首先說(shuō)一下數(shù)組指針和函數(shù)指針的定義問(wèn)題。
一條重要的規(guī)則:函數(shù)和數(shù)組修飾符的優(yōu)先級(jí)比指針修飾符的優(yōu)先級(jí)高。函數(shù)的修飾符為()、數(shù)組的修飾符為[]、指針的修飾符為*。
eg:
int *A[N]: 等價(jià)于(int*)(A[N]):A[N]表示有N個(gè)元素的數(shù)組。元素類(lèi)型為int*
int (*A)[N]:因?yàn)橛欣ㄌ?hào)提高了*的優(yōu)先級(jí)。所以等價(jià)于int ((*A)[N])。表示A是一個(gè)指針。A指向的是含有N個(gè)元素的數(shù)組。數(shù)組中存放的元素為int型。
對(duì)于指向函數(shù)的指針。
int (*afp2[N])(); afp2[N]表示afp2是個(gè)含有N個(gè)元素的數(shù)組。數(shù)組中的元素為指向返回值為int、無(wú)參數(shù)的函數(shù)指針。
因?yàn)楹瘮?shù)的聲明較為復(fù)雜。可以用typedef來(lái)使代碼更加明確。
我們用typedef來(lái)改寫(xiě)上面的聲明。
typedef int (*FP)();//定義FP為返回值為int、參數(shù)列表為空的函數(shù)的類(lèi)型。
FP afp2[N];//含有N個(gè)元素的數(shù)組,返回值為FP。
將一個(gè)函數(shù)的地址初始化或賦值給一個(gè)指向函數(shù)的指針時(shí),無(wú)需顯示的取其地址。編譯器知道隱式的取其地址。
void*可以指向任意類(lèi)型的數(shù)據(jù)。
不存在可以指向任意類(lèi)型函數(shù)的通用指針。