#include <stdio.h>
typedef int (*returnInt)(void*, void*);
struct A
{
returnInt comp;
};
int numcmp(char* s1, char* s2)
{
double v1, v2;
v1 = atof(s1);
v2 = atof(s2);
if (v1 < v2)
return -1;
else
return 0;
}
int main()
{
struct A a;
a.comp = numcmp;
int o = a.comp("6", "5");
printf("%d", o);
return 0;
}
輸出結果:
0
行3:用typedef來宣告函數指標(function pointer),之後只要寫retutnInt,就算是寫整個函數指標,不用每一個地方都寫完整的函數指標宣告式。
function pointer的型別,包含它的返回值與參數列。
function pointer的名稱,就是...它的名稱。
用typedef的話,是另外取一個名稱代替它的型別,所以第7行才可以只寫名稱不寫完整的宣告式。
行7:在struct A中,有一個函數指標(function pointer),可以把它當作是c#的委派宣告。(因為函數的返回值與參數必須相同)
行26:指定要執行的function(在此尚未執行)
行28:使用方式,像C++的member function直覺。執行指定的function。
沒有留言:
張貼留言
(什麼是留言欄訊息?)