繁体   English   中英

使用函数指针进行静态结构初始化

[英]static structure initialization with function pointers

我已经用函数名初始化了一个静态结构,如下所示。

我们必须使用常量初始化静态结构。 函数名是C中的常量吗?

struct fp {
        int (*fn)();
};
int f1()
{
        printf("f1 called \n");
        return 0;
}
static struct fp fps = {
        .fn = f1,
};
int main()
{
        fps.fn();
        return 0;
}

如果正在编译时没有任何问题,则初始化结构如下所示。

static struct fp fps = {
        .fn = &f1,
};

在C中,对于函数名,f1和&f1都相同?

f1是函数的名称。 在大多数情况下,当用作表达式时,函数名称会自动衰减到指向函数的指针。 不发生衰减的一个上下文是函数名称是运算符地址( & )的操作数。 因此,作为计算表达式, f1&f1通常是相同的。

实际上,在任何函数调用表达式f(args)f是指向函数的指针。 您可以简单地通过名称调用函数的原因是因为函数名称自动衰减到函数指针。

您也可以转换它并取消引用函数指针。 它们会立即衰减回指针:

int f(void);

f();         // "f" decays to &f
(&f)();      // normal call via function pointer, no implicit decay
(*f)();      // why not
(*****f)();  // ditto

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM