其實很早就知道這樣的概念,只是今天想着來實現一下。首先來理解一下函數指針的定義。對於一個函數原型爲
int PUSH(LNode *node, int data); 那麼我們定義函數指針應該爲
int (*p)(LNode *node, int data);//定義一個
函數指針,該指針指向帶LNode指針類型和int類型的兩個形參,並
返回int類型的值。
這裏要注意一點一定要加(*p)如果不加括號則變成了定義一個函數。
int *p(LNode *node, int data);//定義一個
函數,該函數帶有LNode指針類型和int類型的兩個形參,並返回
int指針類型的值。
如果我們要定義一個返回指針類型的函數指針呢?
int *(*p)(LNode *node,int data);//定義一個函數指針,該函數指針帶有LNode指針類型和int類型的兩個形參,並且返回int指針類型的值。
到這裏應該很清楚函數指針定義的技巧了把?
總結:定義函數指針即int/void/char/int*/struct/struct*+(*name)+(形參列表);
那麼正題來了。如何在結構體中實現部分面向對象的功能呢?很簡單。在結構體中定義函數指針。然後在指向對應函數。最後進行調用就OK啦。
例:
typedef struct{
int *elem;
int (*Del)(int *elem);
}Node;
初始化:
int flag;//表示函數返回狀態
int arr[]={1,2,3};
Node node;
node={arr,delet};//結構體函數指針初始化。
flag=node.Del(node.elem);//調用結構體中定義的函數指針。
本次內容就到此爲止了。