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)) ;