c - C中具有内置参数的函数数组
问题描述
假设我有这两个函数和这两个函数的数组的定义:
int flag;
int add(int a, int b){
return a+b;
}
int multiply(int a, int b){
return a*b;
}
typedef int(*f)(int, int);
f func_array[2] = {&add, &multiply};
现在,在我的代码中有一个特定的地方,我想根据我的标志状态调用这两个函数,每次都使用相同的参数。
例如:
int var;
if(flag == 0)
{
var = func_array[flag](1,1);
}
else{
var = func_array[flag](2,2);
}
有没有办法在数组本身内部定义它?Somwhow 像这样定义数组并调用函数:
f func_array[2] = {&add(1,1), &multiply(2,2)};
int var = func_array[flag]();
这是一种有效的方式吗?有没有更优雅的方法来做到这一点?
解决方案
您可以为每个参数定义一组数组:
#define ARR_SIZE 2
typedef int(*f)(int, int);
f func_array[ARR_SIZE] = {&add, &multiply};
int param1_array[ARR_SIZE] = { 1, 2};
int param2_array[ARR_SIZE] = { 1, 2};
电话会变成
if(flag < ARR_SIZE)
{
int var = func_array[flag](param1_array[flag], param2_array[flag]);
}
我刚刚添加了对数组大小的检查。
用宏
#define flag_call(flag) \
func_array[flag](param1_array[flag], param2_array[flag])
你可以更简化它
if(flag < ARR_SIZE)
{
flag_call(flag);
}
推荐阅读
- java - 为什么使用“multipart/form-data”上传文件时经常出现异常?
- docker - docker 卷与挂载点 docker 卷有什么区别
- gradle - Gradle:处理依赖项更改
- eclipse - Eclipse:自动保存和构建不起作用
- python - 在对象列表中适当更新对象属性的有效方法
- c - 有没有办法询问用户他们想要多少有效数字?
- javascript - Firebase Firestore 的内容未在我的屏幕上呈现
- .net-core - 何在.net核心中执行带有包含数据库和实例sql服务器名称的存储过程
- excel - 在远程计算机上搜索文本文件的内容并使用 powershell 和 export-excel 导出到 excel 文件
- python - 为什么 request.GET.get("edit") 在我的代码中不起作用?