一个函数的定义能不能在执行的时候修改?
因为它需要的一些参数,只有再读入输入文件之后才能确定。
比如,
x=1,函数定义为y=5x;
x=2,函数定义为y[n]=n^2, n=10;
这个函数要被调用很多次,如果每次都在函数内用switch判断,会不会很费时?多谢!
表驱动状态机
举个例子:
f(x, n),当n=0时返回f0(x)...n=k时返回fk(x)...n=9时返回f9(x)
方法1:
可以写一个int f(int x, int n)
里面switch n,然后case 0~9,依次return fn(x)
方法2:
建立一个函数指针的数组:
typedef int (*Tpf)(int);
Tpf pf[10] = {f0, f1, ..., f9};
int f(int x, int n)
{
return pf[n](x);
}
这样不用case一路的判断了,如果决定下一个状态的参数n不是0~n的整数,写个hush函数把它映射到n个函数指针上。
所以这实际上构造了一个自动机,n就是驱动自动机的状态表状态转移的参数。