编码:
double call_by_name(const char *name, int arg) {
static const char *names[] = {"sin", "cos", "tan", NULL};
static double (*fp[])(double) = {sin, cos, tan};
for (int i = 0; names[i] != NULL; i++)
if (strcmp(names[i], name) == 0)
return ((*fp[i])(arg));
return 0;
}
为什么数组在这里*names[]并且*fp[]有关键字static?为什么在这种情况下需要它?
局部
static对象在第一次调用函数时被初始化,并在程序的剩余生命周期中存在(尽管只能在函数内访问)。在这种情况下声明static消除了每次调用函数时数组的创建和初始化。那些。使用多个函数调用,您可以节省初始化过程,但同时会减少使用的内存。示例
с++:g只会执行一次。但是对于
c这段代码根本不会被汇编,因为c需要编译时常量来初始化静态对象。