Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 以下哪个函数调用是有效的?_C_Function_Declaration - Fatal编程技术网

C 以下哪个函数调用是有效的?

C 以下哪个函数调用是有效的?,c,function,declaration,C,Function,Declaration,考虑一下这些声明 char first (int (*) (char, float)) ; int second(char, float); 以下哪个函数调用是有效的 A) 第一个(*第二个) B) first(&second) C) 第一(第二) D) 以上都没有 谁能给我解释一下这个密码吗?这三个电话都是有效的 根据C标准(6.3.2.1左值、数组和函数指示符) 4函数指示符是具有函数类型的表达式。 除非它是sizeof运算符(65)或一元数的操作数& 运算符,类型为“函数返回类型”的函

考虑一下这些声明

char first (int (*) (char, float)) ;

int second(char, float);
以下哪个函数调用是有效的

A)
第一个(*第二个)

B)
first(&second)

C)
第一(第二)

D) 以上都没有


谁能给我解释一下这个密码吗?

这三个电话都是有效的

根据C标准(6.3.2.1左值、数组和函数指示符)

4函数指示符是具有函数类型的表达式。 除非它是sizeof运算符(65)或一元数的操作数& 运算符,类型为“函数返回类型”的函数指示符 转换为具有类型“”指向函数指针的表达式 返回类型“”

而且你甚至可以写

first( ******second );
也就是说,表达式中使用的函数指示符隐式转换为指向函数本身的指针,但实际上有一种情况除外,即当它用作&运算符的操作数时,函数的地址显式采用

这是一个演示程序

#include <stdio.h>

void g( void ( *f )( void ))
{
    f();
}


void f( void )
{
    puts( "Hello!" );
}

int main( void ) 
{
    g( **********f );

    return 0;
}
考虑到函数
first
也可以声明为

char first (int (char, float)) ;

具有函数类型的函数参数被隐式调整为指向函数的指针。

另一个问题是什么?然后我们都可以去出版社,为什么不问问你的编译器选项E——A、B和C都是有效的。然而,我必须说,直到我尝试了它,我才知道答案是E。我很惊讶地看到C在这个问题上玩得又快又松。因此,我对这个问题进行了投票。
f
意味着
&f
*f
意味着
&f
,当然
&f
意味着
&f
@pm100是的,你是对的。弗拉德,这(标准)是说“指针摆弄函数将被忽略”的礼貌方式吗?@PaulOgilvie对不起,我没有理解你的意思。
char first (int (char, float)) ;