整数を取り、void * を返す関数ポインターの typedef を作成しました。
typedef void* (*fp)(int index);
次に、fp と同じ型の別の構造体を含む構造体を作成しました。
typedef struct fp_holder {
fp function_pointer;
iterable *next;
} fp_holder;
fp_holder 内で fp を呼び出す方法を見つけようとしています。
これをテストするために、次のことを行いました。
void *test_fp(int index) {
if (index == 0) {
printf('H');
fflush(stdout);
return [something_that_works];
}
else if (index == 1) {
printf('e');
fflush(stdout);
return [something_that_works];
}
else if (index == 2) {
printf('l');
fflush(stdout);
return [something_that_works];
}
else if (index == 3) {
printf('l');
fflush(stdout);
return [something_that_works];
}
else if (index == 4) {
printf('o');
fflush(stdout);
return [something_that_works];
}
else {
return (void *) NULL;
}
}
fp_holder *a = (fp_holder *) malloc(sizeof(fp_holder));
a->function_pointer = test_fp;
a->next = NULL;
そのため、すべてのセットアップで、次のことを試して a の function_pointer を呼び出そうとしました。
a->function_pointer(0);
(*a->function_pointer)(0);
((*)a->function_pointer)(0);
なぜそれらが機能しないのかわかりません。助けていただければ幸いです!:)
編集
私がやろうとしていること:引数を指定して a の function_pointer を呼び出します。
私は今いくつかの答えを試してみて、何が起こるか見ていきます。
EDIT2
答えた!a->function_pointer(0) を実行して正しく呼び出していましたが、セグメンテーションエラーが発生していたのは [これが私の問題であり、これを明確にする必要があったかもしれません] は printf ステートメントであり、私の呼び出しではありませんでした。printf には、入力した char ではなく文字列が必要です。