如何解决函数作为函数参数
我希望我的格式等没问题,因为这是我第一次发布问题。无论如何,我正在搜索并且找不到解释为什么两个不同的函数定义/声明彼此等效:
#include <iostream>
using namespace std;
int quadrat( int x )
{
return x*x;
}
void printTable_1( int start,int end,int step,int (*func)( int x ) )
{
for ( int i = start; i <= end; i+=step )
{
cout << i << "\t" << func(i) << '\n';
}
}
void printTable_2( int start,int func( int x ) )
{
for ( int i = start; i <= end; i+=step )
{
cout << i << "\t" << func(i) << '\n';
}
}
int main()
{
printTable_1(1,10,1,quadrat);
printTable_2(1,quadrat);
return 0;
}
我不明白的是,我没有在函数“ printTable_2”中明确定义一个函数指针,就像在函数“ printTable_1”中那样,它仍然期望一个。预先感谢您的回答!
解决方法
这两个定义与编译器相同。在第Effective STL页的第20页或PDF第26页中可以找到有关此行为的粗略概述。
现在让我们看看另外三个函数声明。第一个 声明一个函数g,它接受一个指向a的指针的参数 函数不执行任何操作并返回双精度值:
int g(double (*pf)());
这是说同一句话的另一种方式。唯一的区别是 pf是使用非指针语法声明的(两种语法均有效) C和C ++):
int g(double pf()); // same as above; pf is> implicitly a pointer
通常,可以省略参数名称,因此 这是g的第三个声明,其中pf是 淘汰:
int g(double ()); // same as above; parameter name is omitted
所以在您的示例中,我们有
int (*func)( int x )
和
int func( int x )
如您所见,它与示例中的方法相同,在该示例中,我们仅省略了func
和*
周围的括号。最终与编译器完全相同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。