在C語言裡,一個指針可以指向一個函數。這個指針也有兩個屬性,但一個是函數的入口地址,另一個是函數的返值類型。例如下面的程序,它在C語言裡是正確的:
int time12(int i)
{ return(i%12);
}
int main()
{ int(*fp)()=time12;
intt=fp(13);
return0;
}
主函數的第一句是一條定義語句。我們應從等號左邊的標識符讀起,等號左邊出現的除了標識符以外都是類型的符號,讀的順序卻要按照這個符號作為運算符時的運算級別來讀。此句讀作:fp是一個指針、它指向函數(注意,C語言允許其參數類型不寫出)、這個函數的返值是int、這個指針被初始化為函數time12的入口地址。
然而,上述程序在C++裡,第一條語句卻被認為是有錯誤的。C++是強類型檢查語言,這與C++的函數重載機制有關。C++要求必須指出函數的所有形式參數的類型。下列程序才是正確的C++程序:
int time12(int i)
{ return(i%12);
}
int main()
{ int(*fp)(int)=time12;
intt=fp(13);
return0;
}