typedef struct Stack_t* Stack;
typedef void* Element;
typedef Element (*CopyFunction)(Element);
typedef void (*FreeFunction)(Element);
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
関数ポインタについては、こちらを参照してください。
理解を助けるための同様の性質の例、関数ポインタの 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) が呼び出されます。
これ:
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(). */
関数ポインタの使用の他の例: