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

3行目の意味を教えてください。
ありがとう

4

3 に答える 3

3

これは、を受け取ってを返すfunction pointer関数にアドレス指定できる です。ElementElement

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

CopyFunction = ReturnElem;  //assign to function pointer

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

関数ポインタについては、こちらを参照してください。

于 2013-04-23T13:31:21.717 に答える
2

理解を助けるための同様の性質の例、関数ポインタの typedef。

typedef int (*intfunctionpointer_t) (int);

つまり、ここで言っているのは、intfunctionpointer_t は関数ポインターの型であり、関数は int 型のパラメーターを 1 つ持ち、整数を返すということです。

次の 2 つの関数があるとします。

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

それから、

intfunctionpointer_t function = foo;    
function(5);

function(5) を呼び出すと、foo(5) が呼び出されます。

同じ関数ポインタを同じシグネチャの別の関数に割り当てることで、これを拡張することもできます。

function = bar;
function(7);

ここで function(7) を呼び出すと、最終的に bar(7) が呼び出されます。

于 2013-04-23T13:44:11.397 に答える
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(). */

関数ポインタの使用の他の例:

于 2013-04-23T13:30:28.160 に答える