如何在C中获取父对象?

如何在C中获取父对象?,c,C,我需要用C来做 我有一个属性为x的typedef结构,我将从typedef结构创建许多结构。如何从属性中引用给定的父结构。实际上,x是一个函数,函数需要知道另一个属性y是什么 如何在Javascript中实现这一点是 这个,太好了 我的代码 #define NOTHING typedef struct $ { int (*x)(void); int Y NOTHING; } $; int AddOneToParentY (void) { //return This.su

我需要用C来做

我有一个属性为x的typedef结构,我将从typedef结构创建许多结构。如何从属性中引用给定的父结构。实际上,x是一个函数,函数需要知道另一个属性y是什么

如何在Javascript中实现这一点是

这个,太好了

我的代码

#define NOTHING

typedef struct $ {
    int (*x)(void);
    int Y NOTHING;
} $;
int AddOneToParentY (void) {
    //return This.super.Y +1; but in c instead of js
};

$ struct1 = {
    .X = AddOneToParentY,
    .Y = 3 NOTHING
};

$ struct2 = {
    .X = AddOneToParentY,
    .Y = 32 NOTHING
};

//When I call struct2.AddOneToParentY I should get 33

如何做到这一点?也许有一些庞德定义宏的例子?

我想你是在请求类似的C++成员函数指针,java实例方法的引用。但是C没有成员函数或实例方法的类似物。更一般地说,它没有专门面向OOP的内置特性——这就是为什么C++从C中分叉的原因。 C结构的成员可以是指向函数的指针,但通过这样的指针调用该函数与直接调用它或通过指向它的不同指针调用它并无区别。没有区别,因此无法判断使用哪个指针来标识函数,更不用说哪些数据可能与函数相关或存储在函数附近

通常的C替代方法本质上是提供一个显式的this指针,指向需要它的函数,尽管它可以用任何您喜欢的名称,并显式地传递它。此外,这可能会降低或消除在结构中存储指向它的指针的有用性。例如:

typedef struct {
    double x, y, radius;
} circle;

double computeArea(circle *c) {
    return c->radius * c->radius * 3.14159;
}

void moveTo(circle *c, double new_x, double new_y) {
    c->x = new_x;
    c->y = new_y;
}

int main(void) {
    circle a_circle = { .x = 1, .y = 1, .radius = 2 };

    printf("The area is %f\n", computeArea(&a_circle));
}

C语言没有类和继承的概念,因此语言中没有内置类似的功能

您需要声明您的函数,以获取指向要修改的结构的指针并处理该结构。另外,$不是一个好的类型名称。您应该给它一个文本名称

typedef struct mystruct {
    int Y;
} mystruct;

int AddOneToParentY (mystruct *s) {
    return s->Y + 1;
};

mystruct struct1 = {
    .Y = 3
};

mystruct struct2 = {
    .Y = 32
};


...

printf("result=%d\n", AddOneToParentY(&struct1);

您可以先发布与您的问题相关的代码。但要做好准备:根据您的描述,这可能是不可能的。您在每个结构中创建一个指向父级的指针。只有当有一个结构成员包含该数据,或者该数据已经可以访问时,才能指向父级,例如函数参数。@EugeneSh.,是的,我该怎么做?问题太广泛了,发布的代码甚至不是C.,你可以查找树结构来获取一个想法。对于我正在尝试的,你认为我应该切换到C++ +?@平方,我没有根据它来向你提供使用什么语言的建议。我介绍的习惯用法在C语言中比较常见,而且效果很好。但是,如果您想构建类层次结构并严重依赖继承和多态性,那么C语言是一种奇怪的选择。