C語言回調函數


C語言回調函數 
回調函數是一個程序員不能顯式調用的函數;通過將回調函數的地址傳給調用者從而實現調用。
回調函數使用是必要的,在我們想通過一個統一接口實現不同的內容,這時用回掉函數非常合適。
比如,我們為幾個不同的設備分別寫了不同的顯示函數:
void TVshow(); void ComputerShow(); void NoteBookShow()...等等。
這是我們想用一個統一的顯示函數,我們這時就可以用回掉函數了。
void show(void (*ptr)()); 
使用時根據所傳入的參數不同而調用不同的回調函數。

不同的編程語言可能有不同的語法,
下面舉一個c語言中回調函數的例子,其中一個回調函數不帶參數,另一個回調函數帶參數。
//////////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
int Test1()
{
	int i;
	for(i=0; i<30; i++)
	{
		printf("The %d th charactor is: %c\n", i, (char)('a' + i%26));
	}
	return 0;
}
//////////////////////////////////////////////////////////////////////////////
int Test2(int num)
{
	int i;
	for (i=0; i<num; i++)
	{
		printf("The %d th charactor is: %c\n", i, (char)('a' + i%26));
	}
	return 0;
}
//////////////////////////////////////////////////////////////////////////////
void Caller1( void (*ptr)() )//指向函數的指針作函數參數
{
	(* ptr)();
}
//////////////////////////////////////////////////////////////////////////////
void Caller2(int n, int (*ptr)())//指向函數的指針作函數參數,這里第一個參數是為指向函數的指針服務的,
{
	//不能寫成void Caller2(int (*ptr)(int n)),這樣的定義語法錯誤。
	(* ptr)(n);
}
//////////////////////////////////////////////////////////////////////////////
int main()
{
	printf("************************\n");
	Caller1(Test1);		//相當於調用Test1();
	printf("&&&&&&************************\n");
	Caller2(30, Test2); //相當於調用Test2(30);
	return 0;
}
//////////////////////////////////////////////////////////////////////////////

以上通過將回調函數的地址傳給調用者從而實現調用,但是需要注意的是帶參回調函數的用法。
要實現回調,必須首先定義函數指針。函數指針的定義這里稍微提一下。
比如:
int (*ptr)(); 這里ptr是一個函數指針,其中(*ptr)的括號不能省略,
因為括號的優先級高於星號,那樣就成了一個返回類型為整型的函數聲明了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM