首页 / 知识
关于体系结构:在C函数指针中传递更多参数
2023-04-12 05:27:00

Passing more parameters in C function pointers假设我正在创建一个国际象棋程序。 我有一个功能
这将在每个有效的移动中调用函数指针动作。 这一切都很好,但是如果我需要将更多参数传递给动作函数呢? 例如:
重新定义函数指针不是最佳解决方案。 foreachMove函数是通用的,代码中的许多不同的地方都引用它。 对于每个引用都必须更新它们的函数以包含它们不需要的参数是没有意义的。 如何将额外的参数传递给我通过指针调用的函数? 啊,如果只有C支持的闭包...... 安东尼奥是对的;如果需要传递额外的参数,则需要重新定义函数指针以接受其他参数。如果你不确切知道你需要什么参数,那么你至少有三个选择: 您可能需要重新定义函数指针以获取其他参数。
如果您愿意使用某些C ++,可以使用"函数对象":
并将您的
你可以这样称呼它:
但它不会破坏你对 如果我正在读这个,那么我建议的是让你的函数将一个结构的指针作为一个参数。然后,你的结构在需要它时可以有"游戏"和"深度",只要你不需要它们就把它们设置为0或Null。 这个功能发生了什么?你有条件说,
该功能总是需要"游戏"和"深度"吗?然后,它们应该始终是参数,并且可以进入您的原型。 你是否表示该功能有时只需要"游戏"和"深度"?好吧,也许做两个功能,并在需要时使用每个功能。 但是,以结构作为参数可能是最简单的事情。
我建议使用void *数组,最后一个条目总是无效。
接着
如果所有参数都是相同的类型,那么您可以避免使用void *数组,只需发送任何类型的NULL终止数组。
另一种选择是修改 对函数指针使用typedef。请参阅我对此问题的回答 如果您的参数发生变化,我会更改函数指针声明以使用"..."技术来设置可变数量的参数。它可以节省您的可读性,还必须对要传递给函数的每个参数进行更改。它绝对比传递虚空更安全。 http://publications.gbdirect.co.uk/c_book/chapter9/stdarg.html 仅仅是一个FYI,关于链接中的示例代码:一些地方他们有"n args"而另一些地方是带有下划线的"n_args"。他们都应该有下划线。我认为语法看起来有点滑稽,直到我意识到他们在某些地方放下了下划线。 +1来安东尼奥。您需要更改函数指针声明以接受其他参数。 另外,请不要开始传递void指针或(特别是)void指针数组。那只是在惹麻烦。如果你开始传递void指针,你还必须传递某种消息来指示指针类型是什么(或类型是什么)。这种技术很少适用。 如果您的参数始终相同,只需将它们添加到函数指针参数中(或者可能将它们打包到结构中,如果有很多参数,则将其用作参数)。如果您的参数发生了变化,那么请考虑为多个调用方案使用多个函数指针,而不是传递void指针。 |
最新内容
相关内容
pythonpip怎么调用
pythonpip怎么调用,培训,工具,标准,管理,替代品,模块,以上,功能,更多,内容,pip是一个安装和管理Python包的工具,python安装包的工具有easy_inspython不定参数传值怎么做
python不定参数传值怎么做,位置,培训,名称,标准,代码,参数,函数,定义,教程,程序,使用*arg_name定义的位置参数,表示任意多个位置参数;Python标python怎么传递不定参数
python怎么传递不定参数,位置,培训,名称,标准,代码,参数,函数,定义,教程,程序,不定长位置参数使用*arg_name定义的位置参数,表示任意多个位置python函数嵌套时怎么调用
python函数嵌套时怎么调用,培训,函数,周期,变量,嵌套,作用,定义,里面,上层,也就是说,python允许创建嵌套函数。也就是说我们可以在函数里面定python库怎么调用
python库怎么调用,培训,模块,代码,成员,别名,前缀,程序,语句,语法,上面,python使用import导入模块的语法,,主要有以下两种:import模块名1[as别名python子类怎么调用父类方法
python子类怎么调用父类方法,培训,代码,初始化,方法,函数,示例,时调,定义,对象,以上,python中类的初始化方法是__init__(),因此父类子类的初始python子类可以调用父类方法吗
python子类可以调用父类方法吗,培训,名称,资料,情况,地方,函数,参数,方法,表示,语句,python中的子类中的__init__()函数会覆盖父类的函数,一些python函数的参数有几种
python函数的参数有几种,位置,一致,培训,参数,设计,代码,名字,异常,函数,结果,python中函数的参数可以分为位置参数,关键字参数和默认参数。下python怎么调用实例方法
python怎么调用实例方法,代码,培训,方法,对比,参数,实例,空间,变量,定义,函数,在Python的类体中定义的方法默认都是实例方法,也示范了通过对象python如何调用函数
python如何调用函数,代码,培训,函数,名字,工作,处分,较大,变量,程序,定义,函数的定义及其应用所谓函数,就是把具有独立功能的代码块组织成为一python如何调用mysql
python如何调用mysql,培训,流程,一致,密码,数据,数据库,数据库连接,接口,语句,方法,DB-API是一个规范.它定义了一系列必须的对象和数据库存取python怎么调用类方法
python怎么调用类方法,培训,方法,实例,静态,定义,参数,属性,对象,关键字,以上,python中的类用来描述具有相同的属性和方法的对象的集合。它定