c語言的函式指標和void *指向函式
阿新 • • 發佈:2019-02-10
/* 首先要先理解兩個型別的區別。 先說函式指標: 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");
}