参见英文答案 >
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,并且不会发生衰减.