2013-04-23 143 views
2
typedef struct Stack_t* Stack; 
typedef void* Element; 
typedef Element (*CopyFunction)(Element); 
typedef void (*FreeFunction)(Element); 

你能解釋一下第三行的含義嗎?
感謝c中的實現通用堆棧

回答

2

一個類似的性質的例子,以幫助您理解,函數指針的typedef。

typedef int (*intfunctionpointer_t) (int); 

,所以我們在這裏說的是什麼,intfunctionpointer_t是一種類型的函數指針,函數int類型的單個參數,並返回一個整數。

假設你有兩個功能說,

int foo (int); 
int bar (int); 

然後,

intfunctionpointer_t function = foo;  
function(5); 

調用函數(5),最終會調用foo(5);

您也可以通過將相同的函數指針分配給同一個簽名的另一個函數來擴展它。

function = bar; 
function(7); 

現在調用函數(7),最終會調用bar(7);

1

此:

typedef Element (*CopyFunction)(Element); 

定義的別名稱爲CopyFunction一個函數指針類型,用函數返回一個Element的實例,並具有Element一個參數。

人爲的例子:

/* Function declaration. */ 
Element f1(Element e); 
Element f2(Element e); 

Element e = { /* ... */ }; 
CopyFunction cf = f1; 
cf(e); /* Invokes f1(). */ 

cf = f2; 
cf(e); /* Invokes f2(). */ 

的函數指針使用其他例如:

3

這是一個function pointer你可以解決一個函數來取一個Element並返回一個Element,像

Element ReturnElem(Element el){ } //define function 

CopyFunction = ReturnElem; //assign to function pointer 

Element el = ....; 
Element el2 = CopyFunction(el); //call function using function-pointer 

參見here爲函數指針。