在 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 );
我正在研究 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 );