是否可以编写一个将自身作为参数接收的函数?

时间:2019-11-27 21:41:10

标签: c recursion

我在想,您可以将函数作为函数指针传递给函数,例如:

// 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参数接收的函数?

1 个答案:

答案 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本身发生的事情甚至更有趣,因为ff作为参数调用f(尽管f不知道)