Вчера мой друг попросил меня написать функцию на C, которая бы возвращала массив указателей на функции, где i-я функция возвращала бы i.
Подобный эффект легко получить в C ++, но я не уверен, как это сделать в C.
Может ли кто-нибудь помочь мне с этим?
Edit.
Эффект, который я ищу, эквивалентен этому.
vector <function<int()>> get_functions(int n) {
vector <function<int()>> functions;
for (int i = 0; i < n; ++i) {
functions.emplace_back([i]() {
return i;
});
}
return functions;
}
int main() {
auto functions = get_functions(10);
for (auto f:functions) {
cout << f() << endl;
}
return 0;
}
Редактировать.
Как указано в разделе комментариев, я приведу свою неудачную попытку бросить вызов.
typedef int (*fun_t)(void);
int fun() { return 0; }
int fun1() { return 1; }
fun_t *get_functions() {
fun_t *functions = malloc(sizeof(fun_t) * 2);
functions[0] = fun;
functions[1] = fun1;
return functions;
}
int main() {
fun_t* funs=get_functions();
for (int i = 0; i < 2; ++i) {
printf("%d\n",funs[i]());
}
free(funs);
}