在 C 中使用函数指针设置结构字段

Set struct field with function pointer in C

我正在研究 C,我想为 class 模拟一个构造函数,但使用的是 C。 我有一个包含两个字段的结构,一个 int 和一个指向函数的指针,就像这样

typedef struct elem {
    int a;
    void (*initVal)(struct elem*);
} element;

函数initVal如下

void initVal(struct elem* el) {
    el->a = 5;
}

此函数背后的主要思想是将结构本身的字段 a 设置为 5。 主要是:

int main() {
    element a;
    (a.initVal)(&a);
    printf("%d\n", a.a);

    return 0;
}

我的目标是在主程序中打印 5,但该程序会引发运行时错误。这里有什么问题?是否可以调用函数指针来设置定义它的结构的字段?希望这是清楚的。

您在此语句中使用了未初始化的指针

(a.initVal)(&a)

你需要写

void initVal(struct elem* el) {
    el->a = 5;
}

//...

element a;
a.initVal = initVal;

a.initVal( &a );

或者

element a = { .initVal = initVal };
a.initVal( &a );