我想用 C 语言制作一棵函数树,它看起来像这样: http://scr.hu/5rq/vdja0
所以基本上我希望结果是这样的:http://scr.hu/5rq/f04uu
其中 x
是我可以提供的变量( float )。 F0 到 F6 是带有两个参数的随机函数(函数如乘法、加法或给出随机数)。
所以我的确切问题是:我该怎么做?
我知道这可以很容易地完成,方法是将每个函数给出的精确值存储在数组中。
但是当涉及到获得不同的“x”值时,它就变得复杂了。
我最初的想法是创建一个函数,将随机函数附加到树中的每个节点,但是后来,我不确定应该如何构建构成该树的结构,
typedef struct drzewo typ;
struct drzewo {
typ *right;
typ *left;
typ *up;
float *value; //what to do with this ?
};
我想以某种方式更改行“float *value;”放入可以存储类似 Function1(left->value,right->value);
但未运行的函数中,并且不是具有给定参数的函数的确切值,并且 Function1()
或 Function2()
表示将两个参数相除或相乘等的函数。
不,这不是为了学校,是的,这是我使用遗传编程的悲惨尝试。
最佳答案
要创建指向函数的类型,请使用函数原型(prototype)并将函数名称替换为 (*<typename>)
.所以如果你有一个函数 foo
看起来像:
float foo( int arg1, char *arg2 );
你可以创建一个类型“foo_fn”,它是一个指向像 foo 这样的函数的指针:
typedef float (*foo_fn)( int, char * );
然后将其存储在您的结构中,例如:
typedef struct drzewo typ;
struct drzewo {
typ *right;
typ *left;
typ *up;
foo_fn fn_ptr;
};
如果你想要一个包含各种类型函数的结构(可能有不同的返回类型或采用不同的参数),你可能只想将它们存储为 void *
并在您想调用它们时将它们转换为正确的函数指针类型。
关于c - 在C中制作函数树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11511100/