函數指針的初始化及調用

以前只知道函數指針怎麼使用,但是細節就不太瞭解,這裏總結下

和其他指針一樣,函數指針執行間接訪問之前必須把它初始化爲指向某個函數。

函數名被使用時總是由編譯器把它轉換爲函數指針。

#include<stdio.h>

int fun(int a)
{
	printf("Happy %dth birthday\n",a);
	return a;
}


int main(void)
{
	int (*pf)(int ) = &fun;  
	//&操作符不一定要,這只是顯示地說明編譯器將隱式執行的任務。
	
	int iYearsOld ;
	
	iYearsOld = fun(18);
	iYearsOld = (*pf)(19);
	iYearsOld = pf(20);
	
}

 

一.直接使用fun名調用,函數名fun首先被轉換爲一個函數指針,指針確定函數在內存中的位置。然後函數調用操作符調用該函數,執行開始於這個地址的代碼。

二.對pf執行間接訪問操作,把函數指針轉換爲一個函數名。這樣轉換並不是真正需要的,因爲編譯器在執行函數調用操作符之前又會把它轉換回去,這條語句效果等同於第一條。

三.第三條語句等同於前二條。

編譯結果:

 

在《C和指針》P261頁有更詳細的內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章