2014年12月6日 星期六

不要再忘記的function pointer

先貼上一段程式碼(參考自K&R2 Ch5.11)
#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。

沒有留言:

張貼留言