我得承认我缺乏C语言的经验,因此我不确定如何为结构实现函数。有很多答案:Define functions in structs,Can I define a function inside a C structure?,C - function inside struct,但它们没有回答我正在寻找的结果。现在我想要的是以下内容:
假设我有一个这样的struct:
typedef struct Ball {
float x, y;
float speedX, speedY;
float radius;
void (*Draw)();
} Ball;
现在我希望Draw函数能够访问Ball变量的成员,就像我有一个C++中的结构体示例一样。该函数应该能够访问变量,并修改他们,因为我想它。这可能吗
我试过一些像这样的荒谬的东西,但没有任何结果。
typedef struct Ball {
float x, y;
float speedX, speedY;
float radius;
void (*Draw)();
} Ball;
void Draw(float *x, float *y, float *speedX, float *speedY, float *radius) {
DrawCircle((int)*x, (int)*y, (int)*radius, WHITE);
}
这里的C++ equivilant:
struct Ball {
float x{}, y{};
float speedX{}, speedY{};
float radius{};
void Draw() {
DrawCircle((int)x, (int)y, (int)radius, WHITE); //I know I could static_cast, but who cares :)
}
};
int main(int argc, char ** argv) {
Ball ball;
ball.x = 100.f;
...
ball.Draw();
}
正如你所看到的,C++的方式非常简单,我只是不能用C来理解它。
2条答案
按热度按时间slhcrj9b1#
只需按以下方式声明指向函数的指针
当函数被调用时,向它传递一个指向结构类型的对象的指针。
比如说,
该函数可以例如像
并且结构类型的对象的数据成员Draw可以被分配为
或者你也可以像这样声明函数
DrawCircle
假设它仅用于
struct Ball
类型的对象。并直接用这个函数初始化数据成员Draw
inb24sb22#
如果所有的
Ball
结构共享同一个Draw
函数,那么就不需要在结构中存储指向该函数的函数指针。这是一种毫无意义的内存浪费,并不必要地使事情复杂化。只需将每个
Ball
唯一的信息存储在结构中:然后做一个画球的函数:
然后你可以有: