c中的实现泛型堆栈

时间:2013-04-23 13:28:35

标签: c generics stack

typedef struct Stack_t* Stack;
typedef void* Element;
typedef Element (*CopyFunction)(Element);
typedef void (*FreeFunction)(Element);

你能解释一下第三行的含义吗? 谢谢

3 个答案:

答案 0 :(得分: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了解函数指针。

答案 1 :(得分: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);

现在调用function(7),最终会调用bar(7);

答案 2 :(得分: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(). */

使用函数指针的其他示例: