c – 功能地址和功能地址’地址之间没有区别吗?

参见英文答案 >
Why do function pointer definitions work with any number of ampersands ‘&’ or asterisks ‘*’?                                    2个

>            
How does dereferencing of a function pointer happen?                                    4个

void f()
{}

void test()
{
    auto fn_1 = f;
    auto fn_2 = &f;

    assert(fn_1 == fn_2); // OK

    fn_1();      // OK
    fn_2();      // OK
    (*fn_1)();   // OK
    (*fn_2)();   // OK
    (**fn_1)();  // OK
    (**fn_2)();  // OK
    (***fn_1)(); // OK
    (***fn_2)(); // OK
}

这些行为是否由C标准明确定义?

最佳答案 这里的问题是函数衰减成函数指针.变量fn_1和fn_2的类型都是void(*)(),即“指向函数的指针不带参数并返回void”.在fn_1的情况下,函数f衰减为指向函数的指针,而在fn_2的情况下,您明确地将指向函数的指针指定给fn_2,并且不会发生衰减.

点赞