gpt4 book ai didi

C - 我可以在结构中定义默认函数指针吗?

转载 作者:行者123 更新时间:2023-12-03 09:04:22 26 4
gpt4 key购买 nike

struct Point
{
int x;
void(*func)(struct Point*, int);
};

void addToX(struct Point* a, int b) {
a->x += b;
}

void main() {
struct Point p1;
p1.x = 3;
p1.func = &addToX;

printf("%d\n", p1.x);

p1.func(&p1, 2);
printf("%d\n", p1.x);
}

在上面的代码中,我们有一个对象Point,其中包含x和一个函数。

当我创建一个Point时,我需要初始化x和指向函数的指针。

这非常糟糕,因为我不想每次都初始化函数指针!

有没有办法定义它,以便每次创建新的 Point 时它都会自动指向 addToX

最佳答案

如果你想要一些默认值,你需要创建构造函数。像这样的事情:

struct Point createPoint(int x) {
struct Point r = { x, addToX };
return r;
}

然后像这样使用它:

struct Point p1 = createPoint(3);

或者,您可以创建默认值作为宏:

#define POINT_INITIALIZER(x) { (x), addToX }

用法如下:

struct Point p1 = POINT_INITIALIZER(3);

我会推荐函数,因为它们更安全,而且我看不到宏会带来任何优势。

关于C - 我可以在结构中定义默认函数指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48254698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com