1. 程式人生 > >c語言的函式指標和void *指向函式

c語言的函式指標和void *指向函式

/*

	首先要先理解兩個型別的區別。

	先說函式指標:
		void (*fun)(void);    	這個就是一個函式指標了,函式的引數為空

		void (*fun)(int);		這個也是一個函式指標,函式引數有個int
	
	來看看void*型別:
		void *fun;				這樣定義看起來很抽象,有沒有,對於沒有用過空型別的同學來說,
								這樣定義確實會讓人一臉懵逼。
								但是可千萬別小看這個型別,這個型別可是C語言的精華所在啊,
								因為它可以代表任意資料型別,沒錯是任意資料型別,例如:
								int,float...這些基本資料型別就不用多說了,關鍵它還可以代表
								結構體,聯合體,列舉,函式。是不是很牛逼啊。

	下面我主要介紹一下 函式指標 和 void指標指向函式

*/
	void *fun;			//空指標
	void (*fun_1)(void);//函式指標
	void (*fun_2)(int);//函式指標

	//-------------------------這裡是空指標指向函式用法-------------------
	printf("這裡是空指標指向函式用法\n");
	fun=test_func1;		//用空指標指向一個函式

	/*
		(unsigned int (*)(void))   這裡是把這個空指標強制轉換成函式指標
	*/
	(*  (unsigned int (*)(void))  fun)();	//執行該函式

	fun=test_func2;		//用空指標指向一個函式

	/*
		(unsigned int (*)(void))   這裡是把這個空指標強制轉換成函式指標
	*/
	(*  (unsigned int (*)(int))  fun)(100);	//執行該函式

	//-------------------------這裡是函式指標指向函式用法-------------------
	printf("這裡是函式指標指向函式用法\n");
	fun_1=test_func1;		//在這裡,函式指標的型別必須和你指向函式的型別相同,型別相同主要針對引數

	(*fun_1)();		//執行該函式

	fun_2=test_func2;

	(*fun_2)(100);		//執行該函式
void test_func1()
{
	printf("函式1\n");
}
void test_func2(int v)
{
	printf("函式2\n");
}