gpt4 book ai didi

C:如何将一系列变量应用于函数?

转载 作者:行者123 更新时间:2023-12-04 11:23:47 24 4
gpt4 key购买 nike

在 C 中,有没有一种方法可以使用存储在某个数组中的参数来调用函数?我是 C 新手,我什至不确定这是否正确,但例如:

void f0(int a) { ... };
void f1(int a, int b) { ... };
void f2(int a, int b, int c) { ... };

int array[5][2][?] = [
[&f0, [5]],
[&f1, [-23, 5]],
[&f2, [0, 1, 2]],
[&f2, [1235, 111, 4234]],
[&f0, [22]]
];

int i;
for (i = 0; i < 5; i++) {
APPLY?(array[i][0], array[i][1])
}

PS:当数组的项长度不同时,我应该使用什么样的结构?

在 Python 中,这将是:

def f0(a): ...
def f1(a, b): ...
def f2(a, b, c): ...

array = [
(f0, (5,)),
(f1, (-23, 5)),
(f2, (0, 1, 2)),
(f2, (1235, 111, 4234)),
(f0, (22,))
]

for f, args in array:
apply(f, args)

最佳答案

C语言中可能有变元数函数,但机制比较笨重,而且有一定的限制,即必须至少有一个固定参数,而且你需要能够从固定参数或变量中分辨出来变量列表末尾处的参数本身。

一个更典型的解决方案,一个发挥 C 的优势而不是它的弱点的解决方案,就像这个例子。 (更新了函数指针。)

#include <stdio.h>

void f1(int, int *);
void f2(int, int *);

struct BoxOfInts {
void (*f)(int,int *);
int howMany;
int theNumbers[4];
} intMachine[] = {
{f1, 1, { 5, }},
{f2, 2, { -23, 5 }},
{f1, 3, { 0, 1, 2 }},
{f2, 3, { 1235, 111, 4234 }},
{f1, 1, { 22, }},
{ 0 }
};

void dispatch(void)
{
for(struct BoxOfInts *p = intMachine; p->f; ++p)
(*p->f)(p->howMany, p->theNumbers);
}

void f1(int howMany, int *p)
{
while (howMany-- > 0) {
int t = *p++;
printf("f1 %d %d\n", howMany, t);
}
}

void f2(int howMany, int *p)
{
while (howMany-- > 0) {
int t = *p++;
printf("f2 %d %d\n", howMany, t);
}
}

int main()
{
dispatch();
return 0;
}

关于C:如何将一系列变量应用于函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1538837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com