我在想,您可以将函数作为函数指针传递给函数,例如:
// Add pair to given redirect
router.post('/:name/insert_pair', verifyToken, async (request, response) => {
const token = request.header("auth-token")
const usernameFromToken = jwt.decode(token).username
const { code, site } = request.body
// Remember: you may edit only your own content
try {
const edited = await Redirect.findOneAndUpdate(
{
username: usernameFromToken,
name: request.params.name
},
{
$push: {
pairs: { code, site }
}
}
)
const specific = await Redirect.findOne(
{
username: usernameFromToken,
name: request.params.name
})
response.send(specific)
} catch (error) {
response.status(400).json(error)
}
所以我想到了一个事情,实际上是否有可能做一个以某种方式将自身作为C参数接收的函数?
答案 0 :(得分:3)
看看:
int f(void (*p)(void), int n)
{
if (n == 0)
return 0;
int (*g)(void (*)(void), int) = p;
return 2 + g(p, n - 1);
}
int main(void)
{
void (*p)(void) = f;
return f(p, 3);
}
注意:我这样写是为了清楚-如果要删除有关不兼容的指针类型的警告,则需要显式转换指针。
以下程序的返回码为6
,即3
乘以2
。如您所见,我们正在f
中,即main()
中显式地将f(f, 3)
传递给自身。
f
本身发生的事情甚至更有趣,因为f
以f
作为参数调用f
(尽管f
不知道)