軟考程序員輔導:c語言中的函數指針
2012年軟考程序員輔導:c語言中的函數指針
函數在內存中有一個物理位置,而這個位置是可以賦給一個指針的。一零點函數的地址就是該函數的入口點。因此,函數指針可被用來調用一個函數。函數的地址是用不帶任何括號或參數的函數名來得到的。(這很類似于數組地址的得到方法,即,在只有數組名而無下標是就得到數組地址。)
1.怎樣說明一個函數指針變量呢?
為了說明一個變量fn_pointer的類型是"返回值為int的函數指針",你可以使用下面的說明語句:
int(*fn_pointer)();
為了讓編譯器能正確地解釋這句語句,*fn_pointer必須用括號圍起來。若漏了這對括號,則:
int*fn_pointer();
的意思完全不同了。fn_pointer將是一個函數名,其返回值為int類型的指針。
2:函數指針變量
在C語言中規定,一個函數總是占用一段連續的內存區,而函數名就是該函數所占內存區的首地址。我們可以把函數的這個首地址(或稱入口地址)賦予一個指針變量,使該指針變量指向該函數。然后通過指針變量就可以找到并調用這個函數。我們把這種指向函數的指針變量稱為"函數指針變量"。
函數指針變量定義的一般形式為:
類型說明符(*指針變量名)();
其中"類型說明符"表示被指函數的返回值的類型。"(*指針變量名)"表示"*"后面的變量是定義的指針變量。最后的空括號表示指針變量所指的是一個函數。
例如:int(*pf)();
表示pf是一個指向函數入口的指針變量,該函數的返回值(函數值)是整型。
下面通過例子來說明用指針形式實現對函數調用的方法。
intmax(inta,intb)
{
if(a>b)returna;
elsereturnb;
}
main()
{
時間:2012-08-23 責任編輯:admin
相關文章
無相關信息